选择并汇总唯一具有相似行的记录均满足条件的行

时间:2018-12-18 11:34:48

标签: mysql sql

我有一张这样的桌子

id        hash    count    points
1         accd      1        2
2         ebcd      0        1
3         bace      1        4
4         bace      0        2
5         bace      0        3
6         accd      1        2

但是要生成另一个哈希只能同时出现一次的表,如果count为0或1,则对点的值求和。
这是我要在表上强制执行的条件:有一个以上的计数为1或0的相似散列,应优先于计数为1的行选择计数为0的行,并将计数为0的行的点值相加(如果它们更多)比一个)。
我要生成的表的结果如下所示。

id        hash    count    points
1         accd      1        4
2         ebcd      0        1
3         bace      0        5

1 个答案:

答案 0 :(得分:0)

您可以使用条件聚合。一种方法是:

select min(id) as id, hash, count,
       (case when min(count) = 0
             then sum(case when count = 0 then points end)
             else sum(points)
        end) as points
from t
group by hash, count;

另一种方法是将逻辑放在where子句中:

select min(id) as id, hash, count, sum(points)
from t
where t.count = 0 or
      not exists (select 1
                  from t t2
                  where t2.hash = t.hash and t2.count = 0
                 )
group by hash, count;