过滤后如何包含所有用户名

时间:2016-03-28 08:29:47

标签: mysql

my tables

注意:p_date应该是 dd-mm-yy 格式,但excel决定是一个混蛋,因为它显示为 dd-mm

无论如何,对于我的查询,我想检索用户和用户在特定月份发布消息的次数的计数器。

这是我使用的代码:

SELECT users.username, count(*) 
FROM publishdate JOIN users 
ON publishdate.uid = users.uid 
WHERE MONTH(STR_TO_DATE(p_date, '%Y-%m-%d')) = 11 
GROUP BY users.username;

enter image description here

当我过滤11月时,我看到ruby已在该月发布了两次,但如何将已发布0条消息的所有用户都包含在结果中?

提前谢谢大家。

1 个答案:

答案 0 :(得分:1)

您必须在查询左侧使用users表并执行LEFT JOINpublishdate表:

SELECT users.username, count(publishdate.uid) 
FROM users
LEFT JOIN publishdate ON publishdate.uid = users.uid AND
     MONTH(STR_TO_DATE(p_date, '%Y-%m-%d')) = 11 
GROUP BY users.username;

注意:谓词MONTH(STR_TO_DATE(p_date, '%Y-%m-%d')) = 11必须出现在查询的ON子句中,否则LEFT JOIN将等同于INNER JOIN操作。