【问题标题】:Group rows into a new row and sum in SQL将行分组为新行并在 SQL 中求和
【发布时间】:2020-06-11 22:07:14
【问题描述】:

假设我有这样的表:

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 的值求和,并在类型列中给它一个新值,例如“其他”,因此结果如下所示。日期行可以省略。

  type | value1 | value 2
 ––––––––––––––––––––––––
   a   |  100   |   1.2 
   e   |  60    |   5.2 
 other |  65    |   6.2 

只需组合和汇总行或创建所有内容的摘要行会很容易,但我希望类型列在其中包含组合的“其他”值。我将如何解决这个问题?

【问题讨论】:

    标签: sql presto


    【解决方案1】:

    您可以使用两个级别的聚合:

    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);
    

    【讨论】:

    • 第一行就是我要找的!将 group by 压缩为简单的“group by 1”谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    相关资源
    最近更新 更多