如何同时按两列分组并计算对应值的平均值?
按两列合并分组求平均值的解法
原始数据表格
| Col A | Col B | Col C |
|---|---|---|
| P1 | P2 | 10 |
| P1 | P3 | 15 |
| P2 | P1 | 20 |
| P3 | P2 | 30 |
期望结果
- P1: 15((10 + 15 + 20) / 3)
- P2: 20((10 + 20 + 30) / 3)
- P3: 22.5((15 + 30) / 2)
正确解法
你之前用UNION单独分组的问题在于,仅分别统计了ColA和ColB各自的平均值再合并,没有把同一个P在两列中对应的所有ColC值汇总到一起。正确的做法是先通过UNION ALL将两列的P值统一合并为单列,同时保留对应的ColC值,再按这个新列分组计算平均值:
SELECT p_value, AVG(col_c) AS avg_value FROM ( -- 提取ColA中的P值及对应ColC SELECT col_a AS p_value, col_c FROM your_table UNION ALL -- 提取ColB中的P值及对应ColC SELECT col_b AS p_value, col_c FROM your_table ) AS combined_data GROUP BY p_value;
代码说明
- 子查询
combined_data通过UNION ALL把两列的P值合并成单列p_value,同时关联对应的ColC值,确保每个P在两列中出现的所有记录都被保留。 - 外层查询按
p_value分组,用AVG()函数计算该P对应所有ColC值的平均值,最终得到目标结果。
内容的提问来源于stack exchange,提问作者fg10
相关产品推荐
相关产品推荐

