mysql - 选择并求和具有相似行的所有记录满足条件的唯一行
问题描述
我有一张这样的桌子
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
解决方案
您可以使用条件聚合。一种方法是:
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;
推荐阅读
- java - Android 垃圾收集器
- perl - 如何使用perl在文件夹中的文件之间建立符号链接?
- angular - 在 Angular:http post 方法中,如何传递具有“基本身份验证”和“用户名”和“密码”的正文和标头
- python-3.x - 字典没有在 for 循环中分配正确的值
- jboss - 如何改善由于 ManagedBean 中的许多 @Inject 而导致的缓慢
- java - 如何在java中检查重复/相同值的条件
- c++ - 在图像顶部模拟天体(恒星)
- django - django>=1.7 django.setup() 正在提高 AppRegistryNotReady
- visual-studio - 运行时的 Visual Studio 热键检测
- reactjs - AutocompleteArrayInput 显示空白条目