Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在24小时内按小时获取MYSQL数据组即使数据不存在,如果0将选择NULL_Mysql_Sql - Fatal编程技术网

如何在24小时内按小时获取MYSQL数据组即使数据不存在,如果0将选择NULL

如何在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'之间)

例如,数据和查询在此链接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
子句中。

使用

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
子句。