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

Oracle调查APP:按问题ID统计答案平均值SQL实现求助

解决Oracle中按问题分组统计答案平均值的方案

嘿,这个需求其实挺清晰的,用Oracle的基础分组聚合功能就能搞定,我给你拆解下思路和具体实现:

核心思路拆解

  • 首先我们需要按question_id对数据进行分组,这就要用到GROUP BY子句,把相同问题的所有回答归到一组
  • 对每个分组里的answer字段计算平均值,Oracle的AVG()聚合函数正好干这个活
  • 因为你提到user_id是唯一字段,所以每条记录都是独立用户的回答,不需要额外处理重复数据,直接聚合就好

基础实现代码

SELECT 
    question_id,
    AVG(answer) AS average_answer
FROM 
    your_survey_table  -- 记得替换成你的实际表名
GROUP BY 
    question_id
ORDER BY 
    question_id;  -- 可选,按问题ID排序让结果更易读

细节优化与特殊情况处理

  1. 处理NULL值:如果answer字段可能存在NULL(比如用户未作答),AVG()会自动忽略这些值。如果你想把NULL视为0计算,可以用NVL()函数转换:
SELECT 
    question_id,
    AVG(NVL(answer, 0)) AS average_answer
FROM 
    your_survey_table
GROUP BY 
    question_id;
  1. 控制小数位数:如果需要更规整的结果(比如保留2位小数),可以用ROUND()函数对平均值进行四舍五入:
SELECT 
    question_id,
    ROUND(AVG(answer), 2) AS average_answer
FROM 
    your_survey_table
GROUP BY 
    question_id;
  1. 极端情况:同一用户重复回答同一问题:虽然你说user_id是唯一字段,但如果表设计存在疏漏导致同一user_id对同一question_id有多条记录,可以先去重再聚合:
SELECT 
    question_id,
    AVG(answer) AS average_answer
FROM (
    -- 先确保每个用户对每个问题只有一条有效回答
    SELECT DISTINCT 
        user_id,
        question_id,
        answer
    FROM 
        your_survey_table
) grouped_data
GROUP BY 
    question_id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:28:07