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

优化SQL合并查询结果语句:避免两次扫描数据表的方法

更高效的单扫描分组求和方案

当然有更优的实现方式!你原来的查询用了UNION两次扫描数据表,确实会带来额外的性能开销。我们可以通过一次扫描+条件分组的方式完成需求,具体SQL如下:

SELECT 
    CASE 
        WHEN column1 < 3 THEN CAST(column1 AS VARCHAR)
        ELSE '3+' 
    END AS id,
    SUM(count1) AS `sum(count1)`
FROM test
GROUP BY 
    CASE 
        WHEN column1 < 3 THEN CAST(column1 AS VARCHAR)
        ELSE '3+' 
    END
ORDER BY id;

为什么这个方法更高效?

这个查询只对test表做一次全表扫描:

  • 通过CASE WHEN逻辑把数据分成两组:column1小于3的保留原数值(转成字符串是为了和'3+'统一数据类型),大于等于3的统一标记为'3+'
  • 直接基于这个分组规则聚合求和,避免了两次扫描和结果集合并的开销

优化排序(可选)

如果需要保证结果按1→2→3+的顺序输出(避免字符串排序可能出现的问题),可以给ORDER BY加一个辅助排序条件:

SELECT 
    CASE 
        WHEN column1 < 3 THEN CAST(column1 AS VARCHAR)
        ELSE '3+' 
    END AS id,
    SUM(count1) AS `sum(count1)`
FROM test
GROUP BY 
    CASE 
        WHEN column1 < 3 THEN CAST(column1 AS VARCHAR)
        ELSE '3+' 
    END
ORDER BY 
    CASE 
        WHEN column1 < 3 THEN column1
        ELSE 3 
    END;

这样排序时,数值1、2会优先于3+展示,结果顺序更符合预期。

内容的提问来源于stack exchange,提问作者Waleed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:15:28