选择和求唯一行,其中所有行相似的记录都满足条件

n3h0vuf2  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(307)

我有一张这样的table

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,则应优先选择计数为0的行,而不是计数为1的行,并将计数为0的行的点数相加(如果它们多于一个)。
我想要生成的表的结果如下所示。

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

dfty9e191#

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

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;

相关问题