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

如何合并UNION查询以按CategoryID获取填充率与行数统计

最优合并分组统计与整体总计的SQL方案

可以使用GROUP BY WITH ROLLUP语法替代原有的UNION查询,该方式仅需扫描一次临时表,性能更优,同时能生成与原查询完全一致的结果(分组统计+整体总计)。

实现代码

SELECT
    CASE 
        WHEN GROUPING(CategoryID) = 1 THEN '整体总计'
        ELSE CAST(CategoryID AS VARCHAR(50))
    END AS CategoryID,
    COUNT(*) AS Table_RowCount,
    COUNT(ArbitraryColumnName) AS Field_NonNullCount,
    COUNT(DISTINCT ArbitraryColumnName) AS Field_DistinctCount,
    ROUND((COUNT(ArbitraryColumnName) * 100.0 / COUNT(*)), 2) AS Field_FillRate
FROM #TempTable
GROUP BY CategoryID WITH ROLLUP;

关键说明

  • GROUPING(CategoryID) = 1用于识别ROLLUP生成的整体总计行,这里将其显示为"整体总计",若需用NULL标识可直接移除CASE逻辑。
  • 所有统计指标的计算逻辑与原UNION的两个查询完全对齐:
    • COUNT(*)统计分组/整体的总行数
    • COUNT(ArbitraryColumnName)统计非NULL值的数量(COUNT会自动忽略NULL)
    • COUNT(DISTINCT ArbitraryColumnName)统计字段的去重值数量
    • Field_FillRate按非NULL行数占总行数的百分比计算,保留两位小数
  • 相比原UNION方案,此方法仅需扫描一次临时表,在数据量较大时性能优势显著。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:07:05