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排序让结果更易读
细节优化与特殊情况处理
- 处理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;
- 控制小数位数:如果需要更规整的结果(比如保留2位小数),可以用
ROUND()函数对平均值进行四舍五入:
SELECT question_id, ROUND(AVG(answer), 2) AS average_answer FROM your_survey_table GROUP BY question_id;
- 极端情况:同一用户重复回答同一问题:虽然你说
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
相关产品推荐
相关产品推荐

