所有值和单独组的平均值

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