我在数据库查询方面遇到了非常不同的问题。有一些不同的场景:
我创建了一个包含 3 列的表。它们有 ID、ItemId、TypeId 列。我需要一个计数查询,它应该将 ItemId 和 TypeId 一起计数,但重复的列除外。例如;
Id ItemId TypeId
-- ------ ------
1 1 1 -> count +1
2 1 1 -> ignore
3 1 2 -> count -1
4 1 2 -> ignore
5 1 1 -> count +1
结果计数 = 1
最后,如果不同的行重复,则 count 忽略该行。但是 TypeId 数据对于一个特定项目发生了变化,它应该增加或减少计数。 TypeId 等于 1 个计数 +=1,等于 2 个计数 -=1。
最佳答案
在 MySQL 中,您似乎会使用 count(distinct)
:
select count(distinct itemId, typeId)
from t;
但是,您确实遇到了间隙和岛屿问题。您正在查看顺序以了解发生变化的地方。
如果我相信id
没有间隙,你可以这样做:
select count(*)
from t left join
t tprev
on t.id = tprev.id + 1
where not ((t.itemId, t.typeid) <=> (tprev.itemId, t.prev.id))
关于MYSQL计算不同数据取决于if条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52816025/