首页 > 解决方案 > 选择并求和具有相似行的所有记录满足条件的唯一行

问题描述

我有一张这样的桌子

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

但想要生成另一个表,其中哈希只能同时出现一次,如果计数为 0 或 1,则对点的值求和。
这是我想在表上强制执行的条件:如果有多个类似的哈希计数为 1 或 0,计数为 0 的行应优先于计数为 1 的行和计数为 0 的行的点值相加(如果它们超过一个)。
我想要生成的表的结果如下所示。

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

标签: mysqlsql

解决方案


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

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;

推荐阅读