1,今天试着码了一下教程里的题目,是找出每一个班级的身高最高的学生,用的是先order by降序排序所有学生升高,再用
group by分组每一个班级取第一个值,却发现当使用子查询时,得到的仍旧是未排序时的结果,即没有取到最高身高,想问下为何使用子查询时,order by会失效,谢谢!
↑这是建立的表,有班级和身高记录
↑使用group by查询一切正常,获得的都是每个id班级的第一个记录
↑使用order by查询一切正常,获得的是按照年龄降序排序的结果
↑当使用表子查询时,结果和前面单独group by一样,排序并没有生效,下面是代码
select from (select from student_text2 order by height desc)
as student_wudi group by c_id;(有人说加limit会有用,试过无效)
尝试着将select范围添加进去,发现并没啥用...
select student_wudi. from (select from student_text2 order by height desc)
student_wudi
group by c_id;
以上就是遇到的问题,可能对大佬来说是小问题,不过这着实困扰我..希望能得到帮助,谢谢!
5.7的吧?5.7以后对排序的sql解析做了优化,子查询中的排序是会被忽略的
5.6你这样写是没问题的,5.7的话需要换一换了,使用聚合函数取出你要的记录再关联原表获取第一条记录
或者使用组内排序生成行号后再按行号取第一条也行