UNION ALL和order by 的关系,group by 和字段的关系,以及MAX函数

1、UNION ALL 和 ORDER BY的关系

  • 默认是对 UNION ALL 的结果进行排序

@坚果云附件 UNION ALL 排序问题.xmind - 坚果云

2、GROUP BY 和 ORDER BY的关系

参考:mysql group by 排序问题_闷声发大财 - CSDN 博客

原始数据:

2.1、ORDER BY 默认是对 GROUP BY 的结果进行排序

结果如下:无论根据什么字段进行排序,排序的数据ID都为1、2。表示GROUP BY选取的结果始终是一致的,ORDER BY 只对该结果排序。

2.2、MAX()函数只取该列的最大值,并非最大值对应的一行。

  • 如果只是取某个字段种的最大或者最小值,可以使用MAX()函数。同时该字段可以不必出现在GROUP BY 之后。
  • 为什么不是最大值对应的一行,因为10和13对应的ID分别为9和12

-

原理:相当于是在 GROUP BY 后选出本组的最大,对分组没有起到任何影响!

2.3、使用子查询,完美解决

注:MYSQL5.7 版本的子查询的排序需要加 LIMIT 排序才有效

如下:

  • 第二条没生效,第三条生效是因为Mysql版本问题,请知悉。

2.4 子查询的替代方案

方案一:

mysql group by 组内排序方法_傲雪星枫 - CSDN 博客

如果我们是想找到某一行对应的数据。那么可以分多步执行

  • 1、使用MAX函数,找到需要的行的ID;
  • 2、使用right join 上一步的数据,就得到了最终结果;
posted @ 2020-01-06 13:47  不无聊  阅读(1228)  评论(0编辑  收藏  举报