SUM和GROUP BY 2个不同的值

时间:2018-08-01 22:33:13

标签: sql group-by sum aggregate-functions

我想在一个列中对2个不同的值进行分组。

我有这张桌子

enter image description here

我想像这样将CLASS A与B分组,然后将Class B分组

enter image description here

这在SQL中可行吗?

3 个答案:

答案 0 :(得分:2)

您可以尝试使用CASE,当'A-B'class'A'时返回'B'

SELECT CASE
         WHEN class IN ('A', 'B') THEN
           'A-B'
         ELSE
           class
       END class,
       sum(budget)
       FROM elbat
       GROUP BY CASE
                  WHEN class IN ('A', 'B') THEN
                    'A-B'
                  ELSE
                    class
                END;

答案 1 :(得分:1)

我相信达到此目的的最佳方法是使用CASE语句。

在此处查看文档:{​​{3}}

例如

SELECT CASE WHEN CLASS IN ('A','B') THEN 'A-B'
       ELSE CLASS
       END AS GROUPED_CLASS, 
       SUM(BUDGET)
FROM budgets
GROUP BY GROUPED_CLASS

以上查询应会为您提供所需的内容。

答案 2 :(得分:1)

这里有2种方法...首先是使​​用case语句,如其他人所说。这是一个基于代码的解决方案,这意味着如果将来有更改,您需要在代码中进行更改(如果在其他地方使用此逻辑,则需要在多个报表上进行更改)。

替代方法是创建一个管理此关系的表。创建一个具有两列class和display_name的表(我将调用dim_class),并使用该表管理关系。

类,显示名称

A,a-b

B,a-b

C,C

Select display_name, sum(budget)
From class inner join dim_class on class.class = dim_class
Group by display_name

如果这是一个快照代码,则id带有一个快速的case语句。如果您正在重用逻辑或有很多类,则该表将更易于维护。您还可以将它们放入的水桶加倍...

类,显示名称

A,a-b

B,a-b

C,仅c

A,c和a

C,c和a