仅在满足条件时才进行分组

时间:2015-05-18 10:53:29

标签: mysql sql group-by

我有一个包含字段TYPES,AMOUNT和COMMENT

的表格

我想按TYPES字段分组,但如果'TYPES'值为“other”且''COMMENT'不为空,我希望这些记录单独显示。

示例结果:

+-----------+-----------+-----------+
| types     | amount    | comment   |
+-----------+-----------+-----------+
| type1     |     27    |           |
| type2     |     65    |           |
| type3     |     45    |           |
| other     |     4     | blabla    |
| other     |     8     | something |
-------------------------------------

因此,我不想将这两个“其他”记录分组,而是希望这些记录单独显示(但只有当它们也有评论时)

2 个答案:

答案 0 :(得分:4)

如果我理解正确,您希望将具有给定类型的所有行组合在一起,除非类型为“其他”并且评论不是NULL

近似值是:

select types,
       (case when types = 'Other' and comment is not null
             then comment end) as comment,
       sum(amount) as amount
from table t
group by types, 
         (case when types = 'Other' and comment is not null
               then comment end);

唯一的问题是,带有types = 'Other'相同注释的行将组合在一起。要正确解决这个问题,每行需要一个唯一的标识符,而MySQL并不容易提供。

答案 1 :(得分:2)

在您的情况下,我看到两个单独的数据集。尝试使用union all,如下所示

select types, amount,comment 
from tab
where (types = 'other' and comment is not null)
or types <> 'other'
group by types 
union all
select types, amount,comment  
from tab
where types = 'other'
and comment is null