sql获取X中没有特定Y值的X的计数,Y

时间:2015-12-02 22:39:41

标签: mysql

在给定的表格中,有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 

1 个答案:

答案 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