本文共 1211 字,大约阅读时间需要 4 分钟。
针对SQL查询中UNION ALL操作导致的排序问题,我们可以通过以下方法解决问题。
在使用UNION ALL操作合并两个SELECT结果时,发现合并后的结果排序不稳定,导致输出顺序混乱。尽管已在查询中添加排序条件ORDER BY rate
,但结果仍不符合预期。
为了确保排序稳定性,可以在结果集中添加一个额外的字段,并在排序时优先基于该字段。这种方法可以保证在合并后的结果中,数据按照预期顺序排列。
SELECT * FROM ( SELECT SUM(c.overtime_num) AS delay_num, ROUND((SUM(c.total_num) - SUM(c.overtime_num)) * 100 / SUM(c.total_num), 2) rate, '全网' AS reaCode, 0 AS od FROM calc_vmap_repair_timely_rate_mon_stat c WHERE c.`type` = 22 AND c.MONTH BETWEEN '2019-01' AND '2019-01') t1UNION ALLSELECT SUM(c.overtime_num) AS delay_num, ROUND((SUM(c.total_num) - SUM(c.overtime_num)) * 100 / SUM(c.total_num), 2) rate, c.motorcade_area_code AS reaCode, 1 AS odFROM calc_vmap_repair_timely_rate_mon_stat cWHERE c.`type` = 22 AND c.MONTH BETWEEN '2019-01' AND '2019-01'GROUP BY c.motorcade_area_code) t2ORDER BY od, rate;
od
,分别设置为0
和1
。ORDER BY
中,先按od
字段排序,再按rate
排序。UNION ALL
操作合并结果时,确保每个结果集中的数据具有唯一性,避免重复记录。od
字段只用于排序时。这种方法有效解决了UNION ALL操作后排序问题,同时保持了查询的高效性。
转载地址:http://koywk.baihongyu.com/