我有一个名为ReviewFact的表,它具有以下属性:
- CategoryID (Primary Key)
- Star_Rating (Primary Key)
- No_of_Reviews
CategoryID是指特定产品,Star_Rating是指用户给出的星级评分,No_of_Reviews是指有多少用户给出此评级。
我必须编写一个SQL查询,其中显示每个类别的5星评价数量。
我想出了以下内容:
SELECT r.CategoryID, r.NUMBER_OF_REVIEWS
FROM REVIEWFACT r
WHERE r.Stars = 5
ORDER BY r.NUMBER_OF_REVIEWS desc;
使用这个我获得有5星评价的行的评论数,但不是没有评论的行。那些不应该被计为0的人。我该如何解决这个问题呢?
如果表格中有以下行:
CategoryID Star_Rating No_of_Reviews
1 5 10
2 5 4
3 2 9
查询应该返回
CategoryID No_of_Reviews
1 10
2 4
3 0
答案 0 :(得分:1)
我想你只想要case
:
SELECT r.CategoryID,
(CASE WHEN r.starts = 5 THEN r.NUMBER_OF_REVIEWS ELSE 0 END)
FROM REVIEWFACT r
ORDER BY r.NUMBER_OF_REVIEWS desc;
答案 1 :(得分:0)
同样,使用IF声明:
SELECT r.CategoryID, IF(r.Stars = 5, r.NUMBER_OF_REVIEWS, 0) as bestReviews
FROM REVIEWFACT r
ORDER BY r.NUMBER_OF_REVIEWS desc;
答案 2 :(得分:0)
按类别和有条件地分组:
select
categoryid,
sum(case when stars = 5 then no_of_reviews else 0 end) as no_of_reviews
from reviewfact
group by categoryid
order by no_of_reviews;