繁体   English   中英

如何获取每行SQL特定值的出现次数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM