SQL Group by.Добавить новую строку со средним результатом для всех групп - PullRequest
0 голосов
/ 25 февраля 2019

Я работаю с таблицей, где у меня есть доход для каждого гражданина в регионе, и я хочу иметь возможность искать две вещи с одним запросом (в идеале):

  1. Средний доход длякаждый регион
  2. Средний доход по всем регионам.

Чтобы выполнить первое, я бы сделал группу следующим образом:

select avg(income),region,count(*) as population_size from income_region group by region

Однако вышеупомянутое не отображает средний доход по всем регионам.И я не могу суммировать средний доход, так как численность населения в каждом регионе отличается.Для этого мне нужно также создать следующий запрос:

select avg(income),count(*) as population_size from income_region

Есть ли способ включить последний запрос в первый запрос и назвать его как «Все» вместо имени региона,

Ответы [ 2 ]

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

Большинство баз данных поддерживают rollup или grouping sets:

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

Или:

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

использовать объединение всех

select avg(income),region,count(*) as population_size
from income_region group by region
union all
select avg(income),'',count(*) as population_size from income_region
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...