按at_id与aicicc_attempt分组求aicicc_tp平均值的SQL问题
问题分析与解决
原查询的核心错误:
- 窗口函数仅按
aicicc_attempt分区,未将at_id纳入分组维度,导致不同at_id的aicicc_tp被合并计算平均值,结果不符合需求。 - 误用
DISTINCT试图去重,无法替代GROUP BY实现多维度分组统计的功能。
正确查询语句
要实现按at_id和aicicc_attempt分组计算aicicc_tp的平均值,需用GROUP BY同时指定两个分组字段,并用函数控制结果小数位数:
SELECT at_id, aicicc_attempt, ROUND(AVG(aicicc_tp), 2) AS average FROM iot_athlete_ind_cont_non_cur_chlng_consp WHERE aicid_id = '3' GROUP BY at_id, aicicc_attempt;
若需要与示例中的66.66完全一致(而非四舍五入后的66.67),可改用TRUNCATE函数截断小数:
SELECT at_id, aicicc_attempt, TRUNCATE(AVG(aicicc_tp), 2) AS average FROM iot_athlete_ind_cont_non_cur_chlng_consp WHERE aicid_id = '3' GROUP BY at_id, aicicc_attempt;
验证结果
执行上述语句后,将得到符合预期的结果:
| at_id | aicicc_attempt | average |
|---|---|---|
| 7 | 1 | 60 |
| 7 | 2 | 66.66 |
| 3 | 1 | 66.66 |
内容的提问来源于stack exchange,提问作者Naaz-123
相关产品推荐
相关产品推荐

