问题描述
数据库信息如下:
查询出按DEPARTMENTID分组之后,年龄最大的人的全部信息。
设想①:
SELECT * FROM `index_test` group by
DEPARTMENTID order by age
未达到结果预期,分组了但是每组年纪不是最大的,也就是一个简单查询中(没有子查询)
group by 之后使用order by无效
当分组后每组元素数量可能大于1时
正确语法:
SELECT
t.*
FROM
( SELECT * FROM `index_test` ORDER BY age DESC LIMIT 5 ) t
GROUP BY
DEPARTMENTID
ORDER BY
DEPARTMENTID
先使用子查询按照age排序,然后再进行GROUP BY 分组即可(注意:
MYSQL5.7版本的子查询的排序需要加LIMIT 排序才有效
,即上述语句中子查询的limit是必须的,不然在主查询中又是没有排序)
子查询有limit:结果符合预期
子查询没有limit:不符合预期(每组中的结果不是年龄最大的那个)