所有值和单独组的平均值

Posted

技术标签:

【中文标题】所有值和单独组的平均值【英文标题】:Average of all values and separate groups 【发布时间】:2020-04-07 16:48:18 【问题描述】:

如何计算所有值和每个组的列的平均值? 想象一下,我有:

+-----+-----+
| 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,因此我需要以这种形式使用它,以便能够比较组平均值与总平均值。

也欢迎任何其他解决方案或建议。

【问题讨论】:

【参考方案1】:

在 Postgres 中,你可以使用grouping sets:

select grp, avg(val)
from t
group by grouping sets ( (grp), () );

【讨论】:

【参考方案2】:

使用union

  Select avg(value), 'all' from table
  Union 
  Select avg(value), grp from table 
  Group by grp

【讨论】:

以上是关于所有值和单独组的平均值的主要内容,如果未能解决你的问题,请参考以下文章

计算除当前组之外的所有组的平均值

用 pandas 计算每个后续组的 2 行的平均值

如何在python中用null之前的所有前面值和null之后的第一个后续值的平均值填充null值?

在 4 个单独的图上绘制每个评级的组平均值

尝试根据 ID 计算一系列数据的平均值、最小值和最大值

如何获得组中“中间”值的平均值?