在给定的表格中,有2个重要字段。一个字段是外键,如字段,在这种情况下,userID是另一个是状态字段。数据类型无关紧要,但为了简单起见,两者都是整数。状态字段具有有限数量的输出,再次为简单起见,0或1.外键当然可以是任何合理的整数。
以下查询每个userID最多包含2行,总计每个状态的行数
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。
如何进一步细化这一点,以便只返回Status为0的行,但仅当userID没有任何状态为1的行时。在上述情况下,返回的唯一行将是
userID Status total
4 0 6
答案 0 :(得分:1)
使用条件COUNT
计算该组中有多少1个。
<强> Sql Fiddle Demo 强>
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