在具有相似行的所有记录都满足条件的情况下,选择并求和唯一行



我有一个这样的表

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

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

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;

相关内容

最新更新