所有值和单独组的平均值
Average of all values and separate groups
我如何计算所有值的列的平均值,并具体针对每个组?
想象一下,我有:
+-----+-----+
| val | grp |
+-----+-----+
| 1 | A |
+-----+-----+
| 3 | A |
+-----+-----+
| 2 | B |
+-----+-----+
| 2 | B |
+-----+-----+
| 5 | C |
+-----+-----+
| 1 | C |
+-----+-----+
我想要的结果是:
+-------+-----+
| val | grp |
+-------+-----+
| 2.333 | all |
+-------+-----+
| 2 | A |
+-------+-----+
| 2 | B |
+-------+-----+
| 3 | C |
+-------+-----+
这里我们有每个组的平均值和所有组组合的平均值。
有什么好的方法吗?我知道这样做是不可取的,但由于我正在使用 Metabase,所以我需要以这种形式使用它,以便能够比较组平均值与总平均值。
也欢迎任何其他解决方案或建议。
在 Postgres 中,您可以使用 grouping sets
:
select grp, avg(val)
from t
group by grouping sets ( (grp), () );
使用union
Select avg(value), 'all' from table
Union
Select avg(value), grp from table
Group by grp
我如何计算所有值的列的平均值,并具体针对每个组? 想象一下,我有:
+-----+-----+
| val | grp |
+-----+-----+
| 1 | A |
+-----+-----+
| 3 | A |
+-----+-----+
| 2 | B |
+-----+-----+
| 2 | B |
+-----+-----+
| 5 | C |
+-----+-----+
| 1 | C |
+-----+-----+
我想要的结果是:
+-------+-----+
| val | grp |
+-------+-----+
| 2.333 | all |
+-------+-----+
| 2 | A |
+-------+-----+
| 2 | B |
+-------+-----+
| 3 | C |
+-------+-----+
这里我们有每个组的平均值和所有组组合的平均值。
有什么好的方法吗?我知道这样做是不可取的,但由于我正在使用 Metabase,所以我需要以这种形式使用它,以便能够比较组平均值与总平均值。
也欢迎任何其他解决方案或建议。
在 Postgres 中,您可以使用 grouping sets
:
select grp, avg(val)
from t
group by grouping sets ( (grp), () );
使用union
Select avg(value), 'all' from table
Union
Select avg(value), grp from table
Group by grp