Я хочу иметь возможность сделать запрос, который выбирает средние значения из разных групп, а также средние значения, когда выбрана только одна из групп.
Ниже приведен запрос + упрощенная структура таблицы, которую я использую 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
Проблема с вышеупомянутым запросом состоит в том, что он показывает только Нуль для региона, когда год также является Нулевым. В то время как я хотел бы получить новые строки, где регион равен нулю, а год 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
К сожалению, 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
НТН