返回所有行但聚合其中一些(而不是其他行)

时间:2014-03-19 20:16:17

标签: mysql sql

客户希望区分某些类别的成员,并且不希望区分其他成员。数据看起来像这样(让我们称之为TABLE1):

cola      colb     value
A          a1       10
A          a2       12
A          b2       25
B          zz       12
B          w2       14

我想要的输出是cola = A的所有行,就像它们在源表中一样,但我想聚合cola = B的行,并忽略colb中可变值的值。适合的输出如下:

cola     colb      value
A        a1        10
A        a2        12
A        b2        25
B        all       26

现在,我已经使用此查询获得了所需的输出(即“解决了问题”):

SELECT
    cola,
    'all',
    sum(value)
FROM TABLE1 T1
WHERE cola = 'B'
GROUP BY
    cola,
   'all'
UNION
SELECT *
FROM TABLE1 T2
WHERE cola != 'B'

但是,' TABLE1'实际上是3个其他观点的联盟,虽然这个东西有效但看起来很难看,似乎是蛮力的'对我而言,感觉笨重。你能建议一个更好的方法来思考这个问题吗?

1 个答案:

答案 0 :(得分:2)

这是在case中使用group by语句的简单问题:

select cola,
       (case when cola = 'B' then 'all'
             else colb
        end),
       sum(value)
from TABLE1 T1
group by cola,
         (case when cola = 'B' then 'all'
               else colb
          end);