【发布时间】:2014-03-17 02:13:13
【问题描述】:
我想按小时查询过去 24 小时内表中列值的平均值。即使在没有记录的几个小时内,我也无法显示结果(在这些情况下,我应该平均打印 0)
这是我目前所拥有的:
SELECT HOUR(time), AVG(score) FROM place_rvw WHERE time >= NOW() - INTERVAL 1 DAY AND place_id = 1 ORDER BY HOUR(time);
例如,现在(上午 12 点),我仅有的记录是晚上 9 点和晚上 10 点。因此,结果中只有两行。我希望它有 24 行(代表过去 24 小时的每一行),如果一个小时没有记录,则简单地显示平均值 0。
感谢任何形式的帮助。谢谢!
编辑 我按照 Stephan 的建议尝试了下面的查询,但它仍然显示相同的结果。理想的结果应该是所有 24 行代表每小时。有什么建议吗?
SELECT za_hours.za_hour as hour, AVG(IFNULL(score,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
) za_hours
LEFT JOIN place_rvw
ON za_hours.za_hour = HOUR(time)
AND
time >= NOW() - INTERVAL 1 DAY
AND place_id = 1
GROUP BY
za_hours.za_hour
ORDER BY za_hours.za_hour
【问题讨论】: