You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将两个SQL查询合并为单查询并分别输出到不同列

解决方案:将两个查询结果放在独立列中

UNION 是用来合并行记录的,它会把两个查询的结果按行拼接,列名以第一个查询的别名为准,所以你才会只看到Med列。要实现分独立列展示,可采用以下两种方法:

方法1:使用CASE条件判断(推荐,单表扫描效率更高)

通过CASE WHEN在同一行中根据stars的范围分别填充Med和High列,不符合条件的位置用NULL占位:

SELECT
  CASE WHEN stars BETWEEN 2 AND 3 THEN stars ELSE NULL END AS Med,
  CASE WHEN stars BETWEEN 4 AND 5 THEN stars ELSE NULL END AS High
FROM business
WHERE city = 'Pittsburgh' AND is_open = 1
  AND (stars BETWEEN 2 AND 3 OR stars BETWEEN 4 AND 5);

预期输出:

+-----+------+
| Med | High |
+-----+------+
| 2.0 | NULL |
| 2.5 | NULL |
| 3.0 | NULL |
| NULL| 4.0  |
| NULL| 4.5  |
| NULL| 5.0  |
+-----+------+

方法2:使用子查询+行号关联(适合结果集对齐场景)

如果需要让两个范围的结果按顺序一一对应展示,可以用子查询生成带行号的数据集,再通过行号关联:

WITH med_data AS (
  SELECT stars, ROW_NUMBER() OVER (ORDER BY stars) AS rn
  FROM business
  WHERE city = 'Pittsburgh' AND is_open = 1 AND stars BETWEEN 2 AND 3
),
high_data AS (
  SELECT stars, ROW_NUMBER() OVER (ORDER BY stars) AS rn
  FROM business
  WHERE city = 'Pittsburgh' AND is_open = 1 AND stars BETWEEN 4 AND 5
)
SELECT m.stars AS Med, h.stars AS High
FROM med_data m
FULL OUTER JOIN high_data h ON m.rn = h.rn;

预期输出(两边数量一致时):

+-----+------+
| Med | High |
+-----+------+
| 2.0 | 4.0  |
| 2.5 | 4.5  |
| 3.0 | 5.0  |
+-----+------+

FULL OUTER JOIN能保证任意一边存在的记录都不会被遗漏。

内容的提问来源于stack exchange,提问作者Vladimir Honc-Lamadrid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:52:17