目前,我使用以下查询从SQLite数据库获得每小时的平均评分:
SELECT AVG(rating) as avgRating, strftime('%H:00', date) as hour FROM ratings
WHERE questionId = 1 AND strftime('%Y-%m-%d', date) = strftime('%Y-%m-%d', 'now')
GROUP BY strftime('%H', date);
现在我希望每小时都没有任何价值,得到的平均评分为0,这可能吗?
答案 0 :(得分:3)
典型的答案是(1)在应用程序中执行此操作,以及(2)使用左连接。对于后者,您需要一个所有小时的列表,这可能很麻烦。
在某些情况下,小时数都存在于数据中,但它们会被where
子句过滤掉。在这种情况下,切换到条件聚合通常是获得所需内容的最简单方法:
SELECT COALESCE(AVG(CASE WHEN questionId = 1 THEN rating END), 0) as avgRating,
strftime('%H:00', date) as hour
FROM ratings r
WHERE strftime('%Y-%m-%d', date) = strftime('%Y-%m-%d', 'now')
GROUP BY strftime('%H', date);
这并不适用于所有情况,但如果确实如此,这是一个简单的解决方案。