MySQL 的 UNION
运算符组合了多个 SELECT
语句的结果。 然而,对这些组合结果进行排序可能很棘手,尤其是当您需要在每个单独的组中进行排序时。本指南演示了一种使用伪列来实现此目的的巧妙方法。
解决方案涉及以下步骤:
引入伪列:为每个单独的SELECT
语句添加一列(我们将其称为“排名”)。此列充当组标识符,为每个组分配唯一的值。
构造 UNION
: 使用 SELECT
组合修改后的 UNION ALL
语句(如果需要删除重复项,则使用 UNION
)。
使用外部查询排序: 将 UNION
包装在外部 SELECT
语句中。 使用“Rank”列作为此外部查询的 ORDER BY
子句中的主要排序标准。
优化排序:按“排名”(分组)排序后,添加辅助排序条件(例如“id”或“add_date”)以进一步对每个组内的结果进行排序。
说明性示例:
假设您有一个名为“table”的表,其中包含“id”和“add_date”列。以下查询演示了该技术:
<code class="language-sql">SELECT * FROM ( SELECT 1 AS Rank, id, add_date FROM table UNION ALL SELECT 2 AS Rank, id, add_date FROM table WHERE distance < 10 -- Example condition for a group ) AS combined_results ORDER BY Rank, id, add_date;</code>
此查询添加一个“Rank”列(1 表示第一组,2 表示第二组),然后使用外部 SELECT
首先按“Rank”(对结果进行分组)排序,然后按“id”和每个组内的“add_date”。 这确保了各个 SELECT
语句生成的每个数据子集内的正确排序。请记住将 table
和子查询中的条件替换为您的实际表和过滤逻辑。
以上是如何使用 ORDER BY 对 MySQL UNION 结果按组排序?的详细内容。更多信息请关注PHP中文网其他相关文章!