Mysql Max、 Where和 Group By 三个关键字同时使用 执行顺序

问题产生:网上查阅这三个关键词同时使用,执行顺序是什么?回答的最多的却是Max Where 两个关键字的执行顺序。并且我发现很多回答不仅如出一辙,甚至是错误的!

直接先给出结论,再做阐述


1.Where 和 Group By 同时出现,Where -> Group By(不做分析)
2.Group By 和 Max 同时出现,Group By -> Max
3.Where 和 Max 同时出现,Where -> Max
4.Max Where 和 Group By 同时出现,Where -> Group By  -> Max

其实第一和第二点没有什么争议,争议最大是第三点。网上很多回答是先Max 再where?真的是这样?
新建了一张test表
在这里插入图片描述

Group By 和 Max

sql基础不牢,我们初次使用Max 和Group By 的时候。发现最后查出的数据,不是我们想要的数据。怎么都有些想不明白。我下面还是用例子来解答这个疑惑。

需求: 查询出每科分数最高的人的详细数据。如果使用下面这个SQL
SELECT * ,MAX(score) FROM test GROUP BY subject

查询结果 如下
在这里插入图片描述

分析:我们想要查询出语文最高分,数学最高分,英语最高分的人的详细数据。
但是最后的查询结果却不是我们想要的。每科最高分查出来了,但却对应不上人。
我们想要的是下面的数据
数学最高分,ID为5的李四的数据
英语最高分,ID为6的李四的数据
语文最高分,ID为7的王五的数据
为什么会是上面截图的结果喃?
因为这个SQL 是先执行Group By 分组操作,取分组后的取第一条数据,拼接Max(Score)
select test.* from test join 
(select subject,max(score) as score from test group by subject) as b on 
test.subject = b.subject and test.score=b.score;

Where 和 Max

同样是上面的那张表

例子: SELECT id ,MAX(id) FROM test where id = 4

你们觉得这个查询结果是什么样的?
在这里插入图片描述

如果Max 在Where 之前执行,那么查询结果。id应该为4 Max(id)8。显然结果不是这样的。
而应该Where 在MAX 之前执行

您的点赞,是我更新的动力!
如有错误,望指正

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值