评价的分组统计sql如何做?

问题描述

需求是这样:分别求各等级的条数、总评论条数、好评率、均分。成绩总分为10分制,大于等于8为好评,小于8大于等于4为中评,小于4为差评。
表字段如图
image.png

问题出现的环境背景及自己尝试过哪些方法

这种需求应该可以使用sql查出来吧,应该要用case then吧,但是这块我不是很了解,尝试了下没搞好。只想知道这种sql怎么写

相关代码

   * 好评条数
     */
    private Long highNum;
    /**
     * 中评条数
     */
    private Long midNum;
    /**
     * 差评条数
     */
    private Long lowNum;
    /**
     * 总条数
     */
    private Long totalNum;

    /**
     * 好评率
     */
    private Double goodRate;

    /**
     * 平均分
     */
    private double avgScore;
阅读 2.2k
2 个回答

SQL如下:

  • 各等级的条数:已有
  • 总评论条数:遍历时,加上所有的 total_cnt;如果是分页取,则总数另外执行 SELECT COUNT(1) FROM table_name 获取;
  • 好评率:a_cnt / total_cnt
  • 均分:total_score / total_cnt
SELECT course_id,                    # 课程id
       COUNT(1)       AS total_cnt,  # 课程评论条数
       SUM(score)     AS total_score,# 课程评论总分
       SUM(t.a_score) AS a_cnt,      # 课程好评数
       SUM(t.b_score) AS b_cnt,      # 课程中评数
       SUM(t.c_score) AS c_cnt       # 课程差评数
FROM (SELECT course_id,
             score,
             CASE WHEN score >= 8 THEN 1 ELSE 0 END                        AS a_score,
             CASE WHEN score >= 8 THEN 0 WHEN score >= 4 THEN 1 ELSE 0 END AS b_score,
             CASE WHEN score < 4 THEN 1 ELSE 0 END                         AS c_score
      FROM table_name) t
GROUP BY course_id;

求各等级的条数,思路就是先把每条记录划分等级,然后根据该等级再进行分组计算

select count(1) as '条数', grade as '等级'
from (
  select *,
        case
           when score < 4 then '差评'
           when score < 8 then '中评'
           else '好评'
       end as grade
  from  表名
) t
group by grade
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题