当使用 COUNT 与 LEFT OUTER JOIN 和 GROUP BY 时,MySQL 包含零行

标签 mysql count group-by left-join

如何避免淘汰零 session 用户?我知道也有类似的问题,但这段代码要复杂一些。

SELECT user.userID, user.contactName, user.email, COUNT( * ) AS meetingsCount
FROM user
LEFT OUTER JOIN meeting ON user.userID = meeting.userID
WHERE user.userID NOT 
IN ( 1, 2, 3, 4, 5, 59, 62, 63, 64, 66, 69, 71, 72, 73, 78, 107 ) 
AND SUBSTRING( meeting.meetingCode, 5, 2 ) 
BETWEEN 12 
AND 22 
AND SUBSTRING( meeting.meetingCode, 7, 2 ) 
BETWEEN 01 
AND 12 
AND SUBSTRING( meeting.meetingCode, 9, 2 ) 
BETWEEN 01 
AND 31 
GROUP BY user.userID, contactName, email
ORDER BY meetingsCount DESC

最佳答案

您需要将 session 代码表的逻辑放入您的联接中。否则,与您从 session 表中过滤掉的记录匹配的用户将从您的结果中过滤掉。使您的 JOIN 本质上成为 INNER join。我认为您还应该在 BETWEEN 子句中的值两边加上单引号。

SELECT  user.userID, user.contactName, user.email, COUNT( meeting.userID ) AS meetingsCount

FROM    user

        LEFT OUTER JOIN meeting ON user.userID = meeting.userID
        AND SUBSTRING( meeting.meetingCode, 5, 2 ) BETWEEN '12' AND '22'
        AND SUBSTRING( meeting.meetingCode, 7, 2 ) BETWEEN '01' AND '12'
        AND SUBSTRING( meeting.meetingCode, 9, 2 ) BETWEEN '01' AND '31' 

WHERE user.userID NOT IN ( 1, 2, 3, 4, 5, 59, 62, 63, 64, 66, 69, 71, 72, 73, 78, 107 ) 

GROUP BY user.userID, contactName, email

ORDER BY meetingsCount DESC

关于当使用 COUNT 与 LEFT OUTER JOIN 和 GROUP BY 时,MySQL 包含零行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14962420/

相关文章:

php - 静态数组 vs Mysql + PHP vs 通过ajax更新的XML文件

php - 使用 PHP 变量作为表单字段的默认值

mysql - Rails mysql - 1 个查询中有 2 个计数

c# - 计算多维数组特定维度的项目(C#)

sql - 分组并将多行合并为一行

php - 从数据库获取值并将它们设置在数组中 1tomany

php - 在 PHP 中发布 MySQL 加密

java-如何计算段落之间的空格并从总行数中减去它们?

c# - Linq 中的多重嵌套分组

sql - Postgresql - 分组依据