在计算AVG sqlite时忽略某些值

时间:2017-05-03 07:51:01

标签: sql sqlite

我有以下查询,查找所有总评分大于3且平均清洁度大于或等于5的酒店。有2个表 - 评论哪里有[清洁度]属性和酒店 - 哪里有[ Overall_Rating]属性和两个表都将[Hotel_ID]作为属性。

SELECT
    Reviews.Hotel_ID
FROM [Reviews]
INNER JOIN [Hotel]
    ON Reviews.Hotel_ID = Hotel.Hotel_ID
WHERE [Overall_Rating] > 3
GROUP BY Reviews.Hotel_ID
HAVING AVG([Cleanliness]) >= 5;

问题出在一些评论中,清洁度值为-1,如果是这种情况,我需要在计算平均值时忽略它。我提出了:

SELECT
    Reviews.Hotel_ID
FROM [Reviews]
INNER JOIN [Hotel]
    ON Reviews.Hotel_ID = Hotel.Hotel_ID AND
       Reviews.Cleanliness > -1
WHERE [Overall_Rating] > 3
GROUP BY Reviews.Hotel_ID
HAVING AVG([Cleanliness]) >= 5;

这是正确的,如果不是,我该如何解决?

1 个答案:

答案 0 :(得分:1)

使用WHERE进行过滤是在聚合之前完成的,之后是HAVING。所以你应该把Cleanliness > -1放到WHERE子句中。

将它放入连接的ON子句中的方式完全相同,但是使查询更加不清楚,因为此过滤器实际上与连接本身没有任何关系。