Mysql sql获取在Group by X,Y中没有特定Y值的X的计数
在给定的表中,有两个重要字段。一个字段是类似外键的字段,在本例中是userID,另一个是status字段。数据类型并不重要,但为了简单起见,两者都是整数。状态字段的输出数量有限,同样为简单起见,为0或1。外键当然可以是任何合理的整数 下面的查询每个userID最多有2行,合计每个状态的行数Mysql sql获取在Group by X,Y中没有特定Y值的X的计数,mysql,Mysql,在给定的表中,有两个重要字段。一个字段是类似外键的字段,在本例中是userID,另一个是status字段。数据类型并不重要,但为了简单起见,两者都是整数。状态字段的输出数量有限,同样为简单起见,为0或1。外键当然可以是任何合理的整数 下面的查询每个userID最多有2行,合计每个状态的行数 SELECT userID, Status, count(Status) as total FROM tbl Group by userID, Status 如果在示例表上运行,它将类似于 userID
SELECT userID, Status, count(Status) as total FROM tbl Group by userID, Status
如果在示例表上运行,它将类似于
userID Status total
1 0 5
1 1 2
2 1 2
4 0 6
对于这个虚构的表,这意味着ID为1的用户在此表中有7行,其中5行的状态为0,而其他2行的状态为1。用户ID 2只有2行状态为1,用户ID 3在此表中没有任何行,4有6行状态为0
如何进一步细化此项,以便仅返回状态为0的行,但仅当用户ID没有任何状态为1的行时才返回。在上述情况下,唯一返回的行是
userID Status total
4 0 6
使用条件计数来计算组中有多少个1
SELECT u.userID, u.Status, count(u.Status) as total
FROM users u
JOIN (SELECT userID
FROM users
GROUP BY userID
HAVING COUNT(CASE WHEN Status = 1 THEN 1
ELSE NULL
END) = 0
) f -- filter
ON u.userID = f.userID
GROUP BY userID, Status;
else null
是可选的,以便更好地读取,但可以删除
输出
| userID | Status | total |
|--------|--------|-------|
| 4 | 0 | 6 |
SUM
也起作用
HAVING SUM(case when status = 1 then 1 else 0 END) = 0
我讨厌那些期望我们从结果中推断出源数据集的问题。我既不通灵也不特别聪明,所以我认为它是精英。“Strawberry,为什么当我要在方程x+y=2中求X时,人们问我Y是什么。正如公认的答案所示,有一种方法可以在不知道y的情况下解决这个问题,就像你可以在代数中不知道y的情况下解决x一样。并不是每个事实都需要回答一个问题。此问题是一个概念性问题,概念很重要,它用于什么并不重要。这可用于删除状态为1的所有行,但当用户ID有状态为1的行时,不会删除状态为0的行。它返回第一个示例表格mmmm…中的顶行和底行。。。乔治是谁?你知道,我不知道。只是我很久以前在某个电视节目上听到的。也许是宋飞。