如何计算每行SQL

时间:2017-09-11 11:45:06

标签: mysql sql database

我有一个名为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

3 个答案:

答案 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;