请教MySql中使用表子查询时,试着先排序后分组,出现排序失效的原因?

发布于 2022-09-05 23:00:35 字数 1235 浏览 38 评论 0

1,今天试着码了一下教程里的题目,是找出每一个班级的身高最高的学生,用的是先order by降序排序所有学生升高,再用
group by分组每一个班级取第一个值,却发现当使用子查询时,得到的仍旧是未排序时的结果,即没有取到最高身高,想问下为何使用子查询时,order by会失效,谢谢!

clipboard.png

↑这是建立的表,有班级和身高记录

clipboard.png

↑使用group by查询一切正常,获得的都是每个id班级的第一个记录

clipboard.png

↑使用order by查询一切正常,获得的是按照年龄降序排序的结果

clipboard.png

↑当使用表子查询时,结果和前面单独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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

卖梦商人 2022-09-12 23:00:36

愣是没看懂问题在哪里
我觉得没有问题啊。。就算你子查询排序了你外层的sql不是又分组了吗?有一句话叫做分组之前必排序。

半衬遮猫 2022-09-12 23:00:36

子查询加limit的话,要足够大包括要查询所有的数据;如limit 9999

浴红衣 2022-09-12 23:00:35

5.7的吧?5.7以后对排序的sql解析做了优化,子查询中的排序是会被忽略的
5.6你这样写是没问题的,5.7的话需要换一换了,使用聚合函数取出你要的记录再关联原表获取第一条记录
或者使用组内排序生成行号后再按行号取第一条也行

她说她爱他 2022-09-12 23:00:35

clipboard.png

clipboard.png

找到原因了,是没有在临时表内的语句中添加limit,可能也是和版本有关,教程中使用的是老的mysql,自己用的是5.7,不管怎么样还是顺利解决了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文