[英]How to get count of occurrence of specific value for each row SQL
我有一个名为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
我认为您只需要一个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;
与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;
按类别分组并有条件地求和:
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.