MYSQL计算不同数据取决于if条件

标签 mysql sql count distinct

我在数据库查询方面遇到了非常不同的问题。有一些不同的场景:

我创建了一个包含 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/

相关文章:

php - 用户已经有超过 'max_user_connections' 个事件连接

php - MySQL RAND() 多久可以使用一次?它使用/dev/random 吗?

Javascript 到 php 相同的文件

sql - Access/SQL - 我的 LIKE 语句不起作用,我迫切需要知道原因

sql - 具有非常大列表的 IN 运算符在 SQL Server 中速度太慢。我应该用什么代替?

mysql - SQL嵌套计数

php - 如何在没有自动增量字段的表中对 PHPMyAdmin 中的结果进行排序

MySQL 按特定的 24 小时间隔分组

mysql - 如何在具有多个条件的MySql中获取计数

sql-server-2012 - SQL Server 2012 : get number of occurrences and calculate duration with Dynamic SQL