【发布时间】:2019-12-04 09:55:50
【问题描述】:
我有一个具有以下结构的语句,我正在尝试对所有计数结果求和。
我尝试在嵌套计数查询之外使用 SUM 函数,并为每个联合使用相同的变量声明组合,但错误提示我必须给它们单独的别名。但是,如果我这样做,我不需要在 SUM 函数中单独引用这些吗?
我的 SQL 代码返回 2 行:
SELECT COUNT(col_x) FROM tablea
UNION
SELECT COUNT(col_y) FROM tableb;
输出
64
10
现在,当我尝试对答案求和时,我遇到了麻烦:
WITH total as(
SELECT COUNT(col_x) FROM tablea as rowtotal
UNION
SELECT COUNT(col_y) FROM tableb as rowtotal
) SELECT SUM(rowtotal) from total;
错误在于两次使用变量“rowtotal”。肯定有更简单的方法吗?
我只是想要两个值的总和:
OUTPUT
74
【问题讨论】:
-
您可以只添加 2 个 select 语句的结果而不是 union,从而防止执行计划中的 Merge Join 性能下降:select (SELECT COUNT(col_x) as rowtotal FROM tablea) + (SELECT COUNT(col_y) FROM tableb) 作为答案
-
非常感谢 DaFi 提供的这个替代方案。两种解决方案产生相同的结果。我出于兴趣对这两个执行时间进行了计时(使用 + 方法而不是 UNION 方法)以从 50 个单独的列中提取总数,并且使用 + 方法完成运行所需的时间是原来的两倍(42 秒与 84 秒)——两者都没有非常适合在搜索查询后推送到网页!
-
您好,十个字母,感谢您的更新。如果速度如此重要,而且听起来确实如此,那么您可能需要检查查询执行计划以了解如何使其更快。可能缺少一个(或多个)索引