将行分组到一个新行中并在 SQL 中求和
Group rows into a new row and sum in SQL
假设我 table 是这样的:
date | type | value1 | value 2
––––––––––––––––––––––––––––––
2002 | a | 100 | 1.2
2002 | b | 25 | 2.2
2002 | e | 60 | 5.2
2002 | f | 40 | 4.2
我想要得到的是对 value1 小于 50 的行的 value1 和 value2 的值求和,并在类型列中给它一个新值,例如"other" 所以结果如下。日期行可以省略。
type | value1 | value 2
––––––––––––––––––––––––
a | 100 | 1.2
e | 60 | 5.2
other | 65 | 6.2
只需组合并汇总行或创建所有内容的汇总行就很容易,但我希望类型列在其中具有组合的 "other" 值。我将如何解决这个问题?
您可以使用两个聚合级别:
select (case when value1 > 50 then type else 'other' end),
sum(value1) as value1, sum(value2) as value2
from (select type, sum(value1) as value1, sum(value2) as value2
from t
group by type
) t
group by (case when value1 > 50 then type else 'other' end)
order by min(value1);
假设我 table 是这样的:
date | type | value1 | value 2
––––––––––––––––––––––––––––––
2002 | a | 100 | 1.2
2002 | b | 25 | 2.2
2002 | e | 60 | 5.2
2002 | f | 40 | 4.2
我想要得到的是对 value1 小于 50 的行的 value1 和 value2 的值求和,并在类型列中给它一个新值,例如"other" 所以结果如下。日期行可以省略。
type | value1 | value 2
––––––––––––––––––––––––
a | 100 | 1.2
e | 60 | 5.2
other | 65 | 6.2
只需组合并汇总行或创建所有内容的汇总行就很容易,但我希望类型列在其中具有组合的 "other" 值。我将如何解决这个问题?
您可以使用两个聚合级别:
select (case when value1 > 50 then type else 'other' end),
sum(value1) as value1, sum(value2) as value2
from (select type, sum(value1) as value1, sum(value2) as value2
from t
group by type
) t
group by (case when value1 > 50 then type else 'other' end)
order by min(value1);