Sql 如果没有';不存在

Sql 如果没有';不存在,sql,database,sqlite,Sql,Database,Sqlite,目前,我通过以下查询从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,这可能

目前,我通过以下查询从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,这可能吗?

典型的答案是(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);
这并非在所有情况下都有效,但如果有效,这是一个简单的解决方案。

典型的答案是(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);
这并非在所有情况下都有效,但如果有效,这是一个简单的解决方案。

典型的答案是(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);
这并非在所有情况下都有效,但如果有效,这是一个简单的解决方案。

典型的答案是(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);
这并非在所有情况下都有效,但如果有效,则是一个简单的解决方案