MYSQL中GROUP BY不包含所有的非聚合字段

今天被问到了一个问题

在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

结果很奇怪哈,为什么呢?

参考 这篇文章  https://blog.csdn.net/wxwzy738/article/details/20636563

我们知道,对于不加聚合函数的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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值