mysql - 我如何使用 mysql 获得 0 表示没有记录?

标签 mysql sql

我是 mySql 的新手。我必须根据工作日计算表格中的点击次数。

这里的周期取决于数据库。但是如果上周没有记录,它就不在列表中。但我需要它作为 0。那么我该怎么做呢?

SELECT CASE 
    WHEN PERIOD >= NOW() - INTERVAL 4 WEEK
                AND PERIOD < NOW() - INTERVAL 3 WEEK THEN '22-28 days ago'

    WHEN PERIOD >= NOW() - INTERVAL 3 WEEK
                AND PERIOD < NOW() - INTERVAL 2 WEEK THEN '15-21 days ago'

    WHEN PERIOD >= NOW() - INTERVAL 2 WEEK
        AND PERIOD < NOW() - INTERVAL 1 WEEK THEN '8-14 days ago'

    WHEN PERIOD >= NOW() - INTERVAL 1 WEEK
                THEN 'up to 7 days ago'
           END WeekPeriod, IFNULL(count(CLICKS),0) TotalClicks

FROM TABLE

WHERE PERIOD >= NOW() - INTERVAL 4 WEEK

GROUP BY CASE 
    WHEN PERIOD >= NOW() - INTERVAL 4 WEEK
                    AND PERIOD < NOW() - INTERVAL 3 WEEK THEN '22-28 days ago'

    WHEN PERIOD >= NOW() - INTERVAL 3 WEEK
                AND PERIOD < NOW() - INTERVAL 2 WEEK THEN '15-21 days ago'

    WHEN PERIOD >= NOW() - INTERVAL 2 WEEK
                AND PERIOD < NOW() - INTERVAL 1 WEEK THEN '08-14 days ago'

    WHEN PERIOD >= NOW() - INTERVAL 1 WEEK
                THEN '01 to 7 days ago'

END
 ORDER BY WeekPeriod";

答案应该是这样的

1-7 0 
8-15 14 
16-21 34 
21-28 45

最佳答案

SELECT uq.timespan, COALESCE(tsq.TotalClicks, 0) as Clicks FROM (
SELECT '22-28 days ago' as timespan
union SELECT '15-21 days ago'
union SELECT '8-14 days ago'
union SELECT 'up to 7 days ago'
)uq LEFT JOIN (
SELECT CASE 
    WHEN PERIOD >= NOW() - INTERVAL 4 WEEK
                AND PERIOD < NOW() - INTERVAL 3 WEEK THEN '22-28 days ago'
    WHEN PERIOD >= NOW() - INTERVAL 3 WEEK
                AND PERIOD < NOW() - INTERVAL 2 WEEK THEN '15-21 days ago'
    WHEN PERIOD >= NOW() - INTERVAL 2 WEEK
        AND PERIOD < NOW() - INTERVAL 1 WEEK THEN '8-14 days ago'
    WHEN PERIOD >= NOW() - INTERVAL 1 WEEK THEN 'up to 7 days ago'
           END WeekPeriod, 
           count(CLICKS) TotalClicks
FROM TABLE
WHERE PERIOD >= NOW() - INTERVAL 4 WEEK
GROUP BY WeekPeriod
/*ORDER BY WeekPeriod -- unnecessary, GROUP BY implicits ORDER BY*/
)tsq ON uq.timespan = tsq.WeekPeriod

关于mysql - 我如何使用 mysql 获得 0 表示没有记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13232097/

相关文章:

php imap - 获取正文并制作纯文本

mysql - Unicode编码错误: 'charmap' codec can't encode character u'\xfd' in python 2. 7

mysql - 媒体库 MySql 数据库设计

mysql - 选择 MySQL 中所有子行的计数

MySQL随机与特定选项

mysql - "Unknown column"连接查询中的错误旨在选择感兴趣的组中的单个行

php - MYSQL 表和列命名约定

php - 有没有比事务更高效的方法?

mysql - STR_TO_DATE(含时区)

多个左连接的sql查询困难