我们的项目MySQL版本是5.7,之前有一张图书表,里面有三个关键字段type(图书类型)和book_name(图书名称)和visits_num(浏览量)字段,遇到一个需求需要分别查询出电子书和纸质书浏览量最高的书籍,我心想不是很简单吗,只需要先将图书表按浏览量倒序然后再分组(分组会保留第一条记录)即可,于是三下五除二就写出了sql
select type, book_name
from (select * from book order by visits_num desc) t1
group by type
结果一运行发现和预想的结果集不一样,研究才发现原来在5.7版本中会忽略掉子查询中的order by语句,也就是排序被优化掉了,可以通过在子查询中添加limit来显式的限制生成的子查询结果集
select type, book_name
from (select * from book order by visits_num desc limit 9999) t1
group by type