如何在24小时内按小时获取MYSQL数据组即使数据不存在,如果0将选择NULL
例如,数据和查询在此链接SQL FIDLE上可用,您需要修改如何在24小时内按小时获取MYSQL数据组即使数据不存在,如果0将选择NULL,mysql,sql,Mysql,Sql,例如,数据和查询在此链接SQL FIDLE上可用,您需要修改where子句,因为它正在过滤空记录: where place_rvw.time between '2014-02-17' AND '2014-02-19' or place_rvw.place_id is null 更新的SQL FIDLE: 正如其他人指出的那样,您也可以通过修改左连接条件来实现所需的结果,但我更喜欢where子句 日期筛选器(place\rvw.time介于'2014-02-17'和'2014-02-19'之间)
where
子句,因为它正在过滤空记录:
where place_rvw.time between '2014-02-17' AND '2014-02-19'
or place_rvw.place_id is null
更新的SQL FIDLE:
正如其他人指出的那样,您也可以通过修改左连接
条件来实现所需的结果,但我更喜欢where
子句
日期筛选器(place\rvw.time介于'2014-02-17'和'2014-02-19'之间)
)实际上不是连接两个表所需的条件,但它只是一个数据筛选器,因此它应该位于where
子句中。使用
LEFT JOIN place_rvw ON jam.za_hour = HOUR(time)
AND place_rvw.time between '2014-02-17' AND '2014-02-19'
WHERE子句必须完全删除
另外,我建议使用
place\u rvw.time>='2014-02-17'和place\u rvw.time<'2014-02-19'
。原因-如果存在'2014-02-19 00:00:00'
的数据,则在使用BETWEEN时将包含该数据。您的查询不正确
SELECT
jam.za_hour as `hour`,
AVG(IFNULL(place_id,0)) as average_score
FROM (
SELECT 0 as za_hour
UNION
SELECT 1 as za_hour
UNION
SELECT 2 as za_hour
UNION
SELECT 3 as za_hour
UNION
SELECT 4 as za_hour
UNION
SELECT 5 as za_hour
UNION
SELECT 6 as za_hour
UNION
SELECT 7 as za_hour
UNION
SELECT 8 as za_hour
UNION
SELECT 9 as za_hour
UNION
SELECT 10 as za_hour
UNION
SELECT 11 as za_hour
UNION
SELECT 12 as za_hour
UNION
SELECT 13 as za_hour
UNION
SELECT 14 as za_hour
UNION
SELECT 15 as za_hour
UNION
SELECT 16 as za_hour
UNION
SELECT 17 as za_hour
UNION
SELECT 18 as za_hour
UNION
SELECT 19 as za_hour
UNION
SELECT 20 as za_hour
UNION
SELECT 21 as za_hour
UNION
SELECT 22 as za_hour
UNION
SELECT 23 as za_hour
) jam
LEFT OUTER JOIN place_rvw ON (jam.za_hour = HOUR(time) AND (DATE(time) BETWEEN '2014-02-01' and '2014-02-28'))
GROUP BY
jam.za_hour
ORDER BY jam.za_hour;
select * from place_rvw
如果在where条件中使用between,则需要在on条件中添加此条件。1)显示小提琴的设计结果。2) 您的MySQL版本(在您的生产服务器上)真的是5.6吗?Hai@Akina yes是5.6 yes是5.6如果是-不可能,必须生成小时表。。。但我建议创建一个数字从0到23的静态表——这样就不需要在每个查询中编写长的生成代码……是的,谢谢您的建议@Akina@MiftachHidayatullah不客气。您还可以通过修改
left join
条件来实现所需的结果,但我更喜欢where
子句。日期筛选器(place\rvw.time介于'2014-02-17'和'2014-02-19'
)实际上不是连接两个表所需的条件,但它只是一个数据筛选器,因此它应该属于where
子句。