引入问题
mysql查询最近7天的数据,发现如果当天数据没有在根据创建数据的时间字段分组会自动忽略,这里导致前端显示非常不友好,问题效果如下图:
解决方案
思路一: 可以在自己的程序中做额外的补零处理
思路二: 构建一个最近七天的结果集,然后和查询的结果集合做left join(本文采用第二种方式)
注意:
使用ifnull函数可以讲NULL的字段自动设置为0
案例SQL
SELECT
a.click_date,
ifnull( b.count, 0 ) AS count
FROM
(
SELECT
curdate( ) AS click_date UNION ALL
SELECT
date_sub( curdate( ), INTERVAL 1 DAY ) AS click_date UNION ALL
SELECT
date_sub( curdate( ), INTERVAL 2 DAY ) AS click_date UNION ALL
SELECT
date_sub( curdate( ), INTERVAL 3 DAY ) AS click_date UNION ALL
SELECT
date_sub( curdate( ), INTERVAL 4 DAY ) AS click_date UNION ALL
SELECT
date_sub( curdate( ), INTERVAL 5 DAY ) AS click_date UNION ALL
SELECT
date_sub( curdate( ), INTERVAL 6 DAY ) AS click_date UNION ALL
SELECT
date_sub( curdate( ), INTERVAL 7 DAY ) AS click_date UNION ALL
SELECT
date_sub( curdate( ), INTERVAL 8 DAY ) AS click_date UNION ALL
SELECT
date_sub( curdate( ), INTERVAL 9 DAY ) AS click_date
) a
LEFT JOIN ( SELECT date( 创建时间字段 ) AS datetime, count( * ) AS count FROM 数据表 GROUP BY date( 创建时间字段) ) b ON a.click_date = b.datetime;