Среднее по всем значениям и отдельным группам - PullRequest
0 голосов
/ 07 апреля 2020

Как рассчитать среднее значение столбца для всех значений и для каждой группы отдельно? Представьте, у меня есть:

+-----+-----+
| 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  |
+-------+-----+

Здесь мы имеем среднее значение для каждой группы и среднее значение для всех групп вместе.

Есть ли хороший способ сделать это? Я знаю, что делать это так нецелесообразно, но, поскольку я использую метабазу, мне нужно иметь ее в этой форме, чтобы иметь возможность сравнивать средние значения по группам с общими средними значениями.

Любое другое решение или предложение также приветствуется.

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Использование union

  Select avg(value), 'all' from table
  Union 
  Select avg(value), grp from table 
  Group by grp
1 голос
/ 07 апреля 2020

В Postgres вы можете использовать grouping sets:

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