我有一个这样的表
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;