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

使用CTE计算各季度不同类型客户反馈占比的SQL技术咨询

解决方案

先修正你的CTE逻辑,要实现需求需要分两步:用CTE计算每个季度的总反馈数,再在主查询中统计各季度内不同反馈类型的数量,关联CTE数据计算占比。

正确代码示例

WITH quarterly_total AS (
    SELECT 
        `quarter number` AS quarter,
        COUNT(customer_feedback) AS total_feedback
    FROM 
        order_t
    GROUP BY 
        `quarter number`
)
SELECT 
    q.quarter,
    o.customer_feedback AS feedback_type,
    COUNT(o.customer_feedback) AS type_count,
    q.total_feedback,
    ROUND(COUNT(o.customer_feedback) / q.total_feedback * 100, 2) AS percentage
FROM 
    order_t o
JOIN 
    quarterly_total q ON o.`quarter number` = q.quarter
WHERE 
    o.customer_feedback IN ('good', 'bad', 'ok', 'very good', 'very bad')
GROUP BY 
    q.quarter, o.customer_feedback, q.total_feedback
ORDER BY 
    q.quarter, percentage DESC;

代码说明

  • CTE部分:quarterly_total 负责计算每个季度的总反馈数,按quarter number分组。注意带空格的列名需要用反引号包裹(不同数据库可能需用双引号,比如PostgreSQL)。
  • 主查询部分:
    • 关联order_t和CTE,按季度、反馈类型分组,统计每个类型的反馈数量
    • 用WHERE子句过滤指定的反馈类型,避免无关数据干扰
    • 计算占比时乘以100并保留两位小数,结果更直观
    • 按季度、占比降序排序,便于查看各季度的反馈分布

原代码问题分析

  1. 语法错误:SELECT * COUNT(CUSTOMER_FEEDBACK), QUARTER NUMBER 缺少逗号分隔符,且无需*,应只选择必要列
  2. 表名错误:误写为table1,实际目标表是order_t
  3. 分组逻辑缺失:未按customer_feedback分组,无法统计各类型的反馈数量
  4. 列名处理:带空格的列名未做包裹处理,会导致数据库识别报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:05:14