SQL: группировка по накоплению с несколькими столбцами - PullRequest
0 голосов
/ 26 февраля 2019

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

Ниже приведен запрос + упрощенная структура таблицы.использование atm.

create table income_region (year int,region varchar(40),income float)

insert into income_region (income,region,year) values (2000,'North America', 2000)
insert into income_region (income,region,year) values(2200,'Europe', 2000)
insert into income_region (income,region,year) values(2101,'North America', 2001)
insert into income_region (income,region,year) values(2001,'Europe', 2001)
insert into income_region (income,region,year) values(2400,'North America', 2000)

select avg(income) as avg_income ,region,year as year
from income_region group by region,year with rollup 

Проблема с вышеупомянутым запросом состоит в том, что он показывает только Null для региона, когда год также равен Null.В то время как я хотел бы получить новые строки, в которых регион равен нулю, а год - 2000. И еще один, где регион равен нулю, а год - 2001.

Таким образом, мы получаем все типы вариаций в качестве результата (а не только для года).).Это должно выглядеть примерно так:

avg_income region        year

2200      Europe         2000   
2001      Europe         2001    
2100.5    Europe         Null
2200      North America  2000     
2101      North America  2001   
2167      North America  Null    
2140.4    Null           Null 
2200      Null           2000
2050.5    Null           2001

1 Ответ

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

К сожалению, MySQL не поддерживает ни Cube, ни модификаторы наборов группировки, которые сделали бы эту задачу легкой.Поскольку сведение формирует иерархию для суперагрегатов, вам нужно объединить результаты, чтобы получить полный набор агрегатов.

select avg(income) as avg_income ,region,year as year
from income_region group by region,year with rollup
Union all 
Select avg(income) as avg_income ,null as region,year as year
from income_region group by year

HTH

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