- 正常情况下先将子查询进行排序,然后进行分组便可以取到组内的第一条数据
- 但是在mysql5.7之后需要在子查询排序的时候加一个limit
举个例子
-
student表
SELECT * FROM student id name age gender 1 张三丰 16 1 2 灭绝师太 17 0 3 扫地僧 18 1 4 杨逍 19 1
-
按照gender进行分组,获取每个组内年龄最大的,很明显gender为1的age应该是19,但是事实却不是
SELECT a.* FROM ( SELECT * FROM student ORDER BY age desc ) a GROUP BY a.gender id name age gender 2 灭绝师太 17 0 1 张三丰 16 1
-
这时候如果添加一个limit,便可以得到正确的结果
SELECT a.* FROM ( SELECT * FROM student ORDER BY age desc limit 1000 ) a GROUP BY a.gender id name age gender 2 灭绝师太 17 0 4 杨逍 19 1