Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql sql获取在Group by X,Y中没有特定Y值的X的计数_Mysql - Fatal编程技术网

Mysql sql获取在Group by X,Y中没有特定Y值的X的计数

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

在给定的表中,有两个重要字段。一个字段是类似外键的字段,在本例中是userID,另一个是status字段。数据类型并不重要,但为了简单起见,两者都是整数。状态字段的输出数量有限,同样为简单起见,为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

如何进一步细化此项,以便仅返回状态为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…中的顶行和底行。。。乔治是谁?你知道,我不知道。只是我很久以前在某个电视节目上听到的。也许是宋飞。