【问题标题】:MYSQL Count, LEFT OUTER JOIN with 0 count on a simple caseMYSQL Count, LEFT OUTER JOIN with 0 count on a simple case
【发布时间】:2014-06-03 10:39:34
【问题描述】:

考虑以下两个示例表

表 1:“用户”

ID    REGISTER_TIME    FIRSTNAME    LASTNAME    OPERATION_ID

1     1401789877       John         Doe         29
2     1401789879       Jack         Doe         29
3     1401789878       Pete         Doe         29

(注意 register_time 列存储为 INT(11))

表 2:'calendar_days'

ID    DAY
1     2011-01-01
...   ....
n     2030-31-12

我有以下 MySQL 查询,它运行良好:

SELECT d.day, COUNT(d.day)
FROM calendar_days AS d
LEFT OUTER JOIN users AS l ON DATE(FROM_UNIXTIME(l.`register_time`)) = d.day
WHERE l.`operation_id` = 29
GROUP BY d.day;

但它不会保留 count 等于 0 的天数:

day;COUNT(d.day)

2014-05-07;1
2014-05-09;1
2014-05-12;11
2014-05-13;2713
2014-05-14;2631

我想要什么:

2014-05-07;1
**2014-05-08;0**
2014-05-09;1
2014-05-12;11
2014-05-13;2713
2014-05-14;2631

我觉得我离真相很近,我尝试了任何可能的左外连接,右外连接,仍然没有空结果。

【问题讨论】:

    标签: mysql join count zero outer-join


    【解决方案1】:

    您的where 子句将您的left join 转换为inner join,因为您在连接表上使用了条件。试试

    SELECT d.day, COUNT(d.day)
    FROM calendar_days AS d
    LEFT OUTER JOIN users AS l ON DATE(FROM_UNIXTIME(l.`register_time`)) = d.day
                               AND l.`operation_id` = 29
    GROUP BY d.day;
    

    【讨论】:

    • 说得很有道理,我不知道可以在连接上添加多个条件。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    相关资源
    最近更新 更多