没有GROUP BY的SQL SUM

时间:2018-01-25 17:11:06

标签: sql-server

我编写了一个SQL SELECT来总结临时表的内容。 MCVE是:

WITH cte
AS
(
  SELECT Change FROM (VALUES('INSERT'), ('INSERT'), ('INSERT'), ('INSERT'), ('UPDATE'), ('UPDATE'), ('UPDATE'), ('DELETE'), ('DELETE')) AS A(CHANGE)
)
SELECT  ' I=' + CAST(SUM(IIF(Change = 'INSERT', 1, 0)) AS VARCHAR(10)) +
        ' U=' + CAST(SUM(IIF(Change = 'UPDATE', 1, 0)) AS VARCHAR(10)) +
        ' D=' + CAST(SUM(IIF(Change = 'DELETE', 1, 0)) AS VARCHAR(10))
FROM    cte;

(在原始代码中,我读的表有更多的列而不仅仅是Change(它实际上是来自MERGE语句的OUTPUT,而我记录了MERGE所做的)但我只是参考SELECT中的一列,如上所述。)

这适用于我的期望:I=4 U=3 D=2

但是我在代码审查中意识到我省略了GROUP BY Change语句。

所以我想知道上面的代码是如何工作的?

1 个答案:

答案 0 :(得分:0)

从语法的角度来看,只要有一个或多个未包含在聚合函数中的列(SUM,AVG,COUNT,MIN,MAX),就只需要使用Group By

在您的示例中,您将选择当前包含在Change聚合函数中的SUM列,因此您无需使用Group By

但是,如果您要选择ChangeX列,因为只有Change包含在聚合函数中,您需要添加Group By X。这意味着您将为Change的每个组X进行汇总。

Lear more about GROUP BY here.