笔记,非教程;
最近做的需求,需要用到
group by
,刚好发现自己有点陌生,所以做个笔记;
看到网上资料说:
select * ... group by ...语句
分组函数一般都会和group by联合使用!这也是为什么它被称为分组函数的原因。
任何一个分组函数(count sum avg max min)都是在group by语句执行结束之后才会执行的!
任何一个分组函数(count sum avg max min)都是在group by语句执行结束之后才会执行的!
任何一个分组函数(count sum avg max min)都是在group by语句执行结束之后才会执行的!
当一条sql语句没有group by,整张表的数据会自成一组。
下列图表,假设我们对name进行分组,分组后可以想象中得到虚拟表3.

如果MySQL处于严格模式(sql_mode被设置为ONLY_FULL_GROUP_BY
),
这时,如果SQL写成select * from t group by name
,就会报错,原因就是因为除了name之前,其他列的数据都不是唯一的,在严格模式会报错。
不过,在严格模式(ONLY_FULL_GROUP_BY
)下,依然是想获取聚合列:
SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;
原理就是从分组中,随意获取一个数据,前提也就是你不关心组数据中的不同情况。
- 方法二:如果
GROUP BY
是主键或者 unique NOT NULL
时是可以查询非聚合的列的,原因是此时分组的key
是主键,则每一个分组只有一条数据,因此是可以进行查询非聚合的列的。 - 方法三:关闭严格模式
查看当前sql_model
:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
在非严格模式下,使用group by后,可以在select 非聚合列(也就是没有出现group by后面的字段),这是获取的非聚合列,是自然顺序的第一条;
在严格模式下,使用group by 后,不可以select 非聚合列,解决方法有三种:
- any_value(字段名)
- group by 字段是主键或者非空唯一键
- 关闭严格模式
这个是通俗易懂类型:
Group by分组详解
MySQL中的Group By是否允许SELECT非聚合列的总结
【MySQL】十一、分组函数(group by,having),多字段分组查询
`sno` varchar(20) NOT NULL,
`sname` varchar(20) DEFAULT NULL,
`ssex` varchar(20) DEFAULT NULL,
`sage` int(11) DEFAULT NULL,
`sdept` varchar(20) DEFA...
今天被问到了一个问题
在MYSQL中使用GROUP BY分组时,我们可以select 多个非聚合字段,但是有些字段可能不在GROUP BY中,这样的SQL查询在SQL SERVER、ORACLE中是不合理的,且会报错,但mysql是可以通过,MYSQL的这种特异性,有时查询出来的结果并不是我们需要的。
下面我们来做一个实验
数据表如下:
id name tel
1 a ...
本文导读:在MYSQL中使用GROUP BY分组时,我们可以select 多个非聚合字段,但是这些字段不在GROUP BY中,这样的SQL查询在SQL SERVER、ORACLE中是不合理的,且会报错,MYSQL的这种特异性,有时查询出来的结果并不是我们需要的,那么,我们在使用时应该注意哪些呢?
一、下列语句在MySql中是合规的
select count(1),task_type...
如user_info表中有数据如下:
进行以下查询:select max(user_id),user_id,id,grade from user_info group by grade 应会得到结果:
参考资料 https://www.cnblogs.com/kingszelda/p/7142689.html
https
://stackoverflow.com/questions/23921117/disable-only-full-
group-
by
https
://dev.
mysql.com/doc/refman/5.7/en/
group-
by-handling.html
– set global sql_mode=(
select replace(@@sql_mode, ‘ONLY_FULL_
GROUP_
BY’, ‘’));
–
select @@global.sql_mode;
MySQL讲义第 29 讲——select 查询之GROUP BY
使用 GROUP BY 关键字可以将查询结果按照某个字段或多个字段进行分组。分组的依据为 GROUP BY 后面的字段中取值相等的分为一组。GROUP BY 通常与聚合函数一起使用。语法格式如下:
GROUP BY 字段名|表达式 [HAVING 条件表达式] [WITH ROLLUP]
(1)使用分组查询时,select后面的字段列表只能包含 GROUP BY 后面的字段名或表达式以及聚合函数,不能包含其他字段或表达式,否则会报
resolution will not be reattempted until the update interval of XXX has elapsed or updates are force
125677 阅读