You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效按列统计评分(5-1)并生成指定格式统计表格?

高效统计多列评分分布的SQL方法

我需要按评分5、4、3、2、1分别统计Responsiveness1、Responsiveness2、Reliability1三列的条目数,生成指定格式的统计表格。目前我通过Select Count(Responsiveness1) from table where Responsiveness1 = '5'这类语句手动逐个统计,想知道有没有更高效的实现方式。

原始数据表格

IDClientIDResponsiveness1Responsiveness2Reliability1
10243511543
10254571535
10263827454
10277652111
10287778222
10297612112

期望输出表格

RateResponsiveness1Responsiveness2Reliability1
5211
4111
3011
2112
1221

高效实现方案

可以使用条件聚合的方式,仅需一次查询就能完成所有统计,无需重复执行单值统计语句。

适用于支持CTE(公共表表达式)的数据库(如MySQL 8.0+、PostgreSQL、SQL Server等)

WITH rating_values AS (
    SELECT 5 AS rate UNION ALL
    SELECT 4 UNION ALL
    SELECT 3 UNION ALL
    SELECT 2 UNION ALL
    SELECT 1
)
SELECT
    rv.rate,
    COUNT(CASE WHEN t.Responsiveness1 = rv.rate THEN 1 END) AS Responsiveness1,
    COUNT(CASE WHEN t.Responsiveness2 = rv.rate THEN 1 END) AS Responsiveness2,
    COUNT(CASE WHEN t.Reliability1 = rv.rate THEN 1 END) AS Reliability1
FROM rating_values rv
LEFT JOIN your_table t ON 1=1
GROUP BY rv.rate
ORDER BY rv.rate DESC;

适用于不支持CTE的老版本数据库

SELECT
    rv.rate,
    COUNT(CASE WHEN t.Responsiveness1 = rv.rate THEN 1 END) AS Responsiveness1,
    COUNT(CASE WHEN t.Responsiveness2 = rv.rate THEN 1 END) AS Responsiveness2,
    COUNT(CASE WHEN t.Reliability1 = rv.rate THEN 1 END) AS Reliability1
FROM (
    SELECT 5 AS rate UNION ALL
    SELECT 4 UNION ALL
    SELECT 3 UNION ALL
    SELECT 2 UNION ALL
    SELECT 1
) rv
LEFT JOIN your_table t ON 1=1
GROUP BY rv.rate
ORDER BY rv.rate DESC;

代码说明

  1. 先构造包含所有目标评分(5到1)的数据集,确保即使某个评分在原始表中没有对应数据,结果里也会显示0值。
  2. 通过LEFT JOIN关联原始表,保证每个评分都能出现在最终结果中。
  3. 使用COUNT(CASE ...)进行条件统计:当列值匹配当前评分时返回1,否则返回NULL,COUNT函数会自动忽略NULL值,从而得到对应评分的条目数。
  4. 最后按评分降序排列,与期望输出格式一致。

内容的提问来源于stack exchange,提问作者MCKMB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 07:25:28