SQL: рассчитать общие средние значения для разных вариантов групп - PullRequest
0 голосов
/ 25 февраля 2019

Я работаю с таблицей, которая содержит следующую информацию за 20 разных лет

  1. Доход для граждан за данный год
  2. Регион, в котором указано, где живут граждане
  3. Год, который представляет доход гражданина в текущем году

Я использую группу по функциям, чтобы получить средний уровень дохода для каждой группы, год.И недавно я получил помощь здесь ( SQL Group by. Добавить новую строку со средним результатом для всех групп ), чтобы я мог добавить дополнительную строку со средним доходом для всех регионов.

select avg(income),region,year,count(*) as population_size
from income_region group by region,year
union all
select avg(income),'All','All',count(*) as population_size from income_region

Однако, когда я добавляю в группу дополнительный столбец «год» и пробую решение «объединить все» для года и региона, он рассчитывает только средний доход для всех лет и всех регионов.

В идеале у меня также были бы следующие типы новых групп:

  • Средний доход при year = 2001
  • Средний доход при year = 2002' ... и т. Д. (за все годы)
  • Средний доход за все годы, когда region = 'North America'
  • Средний доход за все годы, когда region = 'Europe' .. и т. д. (для всех регионов)

Как это можно сделать?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

просто используйте накопительный пакет

select avg(income),region,year,count(*) as population_size
from income_region group by region with rollup
0 голосов
/ 25 февраля 2019

Попробуйте использовать with rollup:

select region, year, count(*) as population_size, avg(income)
from income_region
group by region with rollup;

Более подробную информацию вы можете найти в документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...