问题产生:网上查阅这三个关键词同时使用,执行顺序是什么?回答的最多的却是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 之前执行
您的点赞,是我更新的动力!
如有错误,望指正