我有一张这样的桌子
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
答案 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;