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

Posted buwuliao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 上一步的数据,就得到了最终结果;

以上是关于UNION ALL和order by 的关系,group by 和字段的关系,以及MAX函数的主要内容,如果未能解决你的问题,请参考以下文章

order by 和union all 如何共存

在 MySQL 中使用 Union All 和 Order By

UNION ALL、TEXT 字段和 ORDER BY 错误

使用UNION后,ORDER BY 怎样使用

使用Union All 和Order By In View?

如何使用 SQLite 使用 UNION ALL 和 ORDER BY 进行排序