关于group by后的sum函数与case结合问题

如题: 关于group by后的sum函数与case结合问题

img

我的结果:

img

使用group by 后面使用sum 再使用case是什么样的执行流程? 是分组后sum函数针对每个类进行case判断吗,我自己试出来的,自己也不太理解具体啥意思。还请解答!

如果确定是 sqlserver 的话,列转行用 pivot,不用 group 之类的东西


with t as (
    select 1 autoid,'a' name,'第1' season,10 score
    union all select 2,'a','第2',20
    union all select 3,'a','第3',15
    union all select 4,'b','第1',7
    union all select 5,'b','第2',12
    union all select 6,'b','第3',11
    union all select 7,'c','第1',17
    union all select 8,'c','第2',12
    union all select 9,'c','第3',15
    union all select 10,'d','第1',6
    union all select 11,'d','第2',18
    union all select 12,'d','第3',7
)
select * from (
   select name,season,score from t
) a
pivot(max(score) for season in (第1,第2,第3)) p

img

在使用SQL语言中的GROUP BY子句和SUM函数时,可以使用CASE表达式来对分组后的数据进行条件判断和分类汇总。具体的执行流程如下:

  1. 数据分组:根据GROUP BY子句中指定的列,将数据按照不同的类别进行分组。

  2. 对于每个分组,对数据进行求和:使用SUM函数对分组后的数据中指定的列进行求和操作,得到每个类别的汇总值。

  3. 对于每个汇总值,进行CASE表达式的判断:使用CASE表达式对每个类别的汇总值进行条件判断,并将其分类到不同的类别中。

  4. 返回结果集:返回最终的结果集,其中包含分类汇总后的数据。

需要注意的是,CASE表达式是对每个汇总值进行判断和分类,而不是对每个类别进行判断。也就是说,CASE表达式是在对每个类别进行求和之后,对汇总值进行分类的,而不是在对每个类别进行求和之前进行分类的。因此,在分类汇总时,需要使用SUM函数对数据进行求和,然后再将汇总值进行分类。

博主可以利用一些示例验证一下想法