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小时内删除。