Mysql 中的group by【此博客存在问题!!!待完善】
0.背景
- 建表
create table a
(id int,
title varchar(20),
author varchar(20),
date datetime);
- 插入数据
insert into a values
(1,'study haoop','lawson','2018-01-01'),
(2,'study hbase','lawson','2018-07-01'),
(3,'study opentsdb','stumb','2018-08-01'),
(4,'study kafka','lawson','2018-05-03'),
(5,'study spark','lawson','2018-04-01');
- 查看表数据
mysql> select * from a;
+----+----------------+--------+---------------------+
| id | title | author | date |
+----+----------------+--------+---------------------+
| 1 | study hadoop | lawson | 2018-01-01 00:00:00 |
| 2 | study hbase | lawson | 2018-07-01 00:00:00 |
| 3 | study opentsdb | stumb | 2018-08-01 00:00:00 |
| 4 | study kafka | lawson | 2018-05-03 00:00:00 |
| 5 | study spark | lawson | 2018-04-01 00:00:00 |
+----+----------------+--------+---------------------+
5 rows in set (0.00 sec)
1.group by的语法
在mysql中,group by 中的字段,是不需要在select中选择。即,使用下面的sql1,和sql2得到的结果都是一样的排序。
- sql 1
select *
from a
group by date;
- 查询结果
+----+----------------+--------+---------------------+
| id | title | author | date |
+----+----------------+--------+---------------------+
| 1 | study hadoop | lawson | 2018-01-01 00:00:00 |
| 5 | study spark | lawson | 2018-04-01 00:00:00 |
| 4 | study kafka | lawson | 2018-05-03 00:00:00 |
| 2 | study hbase | lawson | 2018-07-01 00:00:00 |
| 3 | study opentsdb | stumb | 2018-08-01 00:00:00 |
+----+----------------+--------+---------------------+
5 rows in set (0.00 sec)
- sql 2
select id,title
from a
group by date;
- 查询结果
+----+----------------+
| id | title |
+----+----------------+
| 1 | study hadoop |
| 5 | study spark |
| 4 | study kafka |
| 2 | study hbase |
| 3 | study opentsdb |
+----+----------------+
5 rows in set (0.00 sec)
2.还有下一种情况
看到表a中的数据是没有是没有任何重复的,但是如果有重复怎么办?比如我们新插入一条数据insert into a values(1,'study hive','ting','2018-09-25');
,这时,就会有id=1的重复,这时再使用sql 1,会是什么样的结果呢?
- sql 1
mysql> select * from a group by date;
- 执行结果
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause
and contains nonaggregated column 'insidemysql.a.id' which is not functionally dependent on columns in GROUP BY clause;
this is incompatible with sql_mode=only_full_group_by
会发现报错,这个原因就是:group by之后