MYSQL中GROUPBY不包含所有的⾮聚合字段
今天被问到了⼀个问题
在MYSQL中使⽤GROUP BY分组时,我们可以select 多个⾮聚合字段,但是有些字段可能不在GROUP BY中,这样的SQL查询在SQL SERVER、ORACLE中是不合理的,且会报错,但mysql是可以通过,MYSQL的这种特异性,有时查询出来的结果并不是我们需要的。
下⾯我们来做⼀个实验
数据表如下:
id name tel
1 a a1
2 a a2
3 b b1
4 b b2
5 c c1
6 c c2
7 c c3
执⾏如下两个语句
1. select id,name,tel from test GROUP BY name
2. select max(id),name,tel from test GROUP BY name
在mysql中,上述语句都可以正确执⾏的,那么结果如何呢
1.的执⾏结果为
id name tel
1 a a1
3 b b1
5 c c1
2.的执⾏结果为
id name tel
2 a a1
4 b b1
7 c c1
结果很奇怪哈,为什么呢?
groupby分组我们知道,对于不加聚合函数的sql来说,它的功能结合了limit来得出结果,也就是刚才说的相当与先group by, 然后在每个group by下⾯进⾏limit 1。 所以上⾯的结果是根据得到的结果集然后根据每个group by 进⾏limit 1得到的结果。
也就是语句1是在对name进⾏group by后,对结果集执⾏limit 1
语句2 是对name进⾏group by 然后取得最⼤的id,然后对不包含聚合函数的字段执⾏limit 1
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论