请教MySql中使用表子查询时,试着先排序后分组,出现排序失效的原因?
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;
以上就是遇到的问题,可能对大佬来说是小问题,不过这着实困扰我..希望能得到帮助,谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
愣是没看懂问题在哪里
我觉得没有问题啊。。就算你子查询排序了你外层的sql不是又分组了吗?有一句话叫做分组之前必排序。
子查询加limit的话,要足够大包括要查询所有的数据;如limit 9999
5.7的吧?5.7以后对排序的sql解析做了优化,子查询中的排序是会被忽略的
5.6你这样写是没问题的,5.7的话需要换一换了,使用聚合函数取出你要的记录再关联原表获取第一条记录
或者使用组内排序生成行号后再按行号取第一条也行
找到原因了,是没有在临时表内的语句中添加limit,可能也是和版本有关,教程中使用的是老的mysql,自己用的是5.7,不管怎么样还是顺利解决了