SQL Select с регистром - выберите в несколько групп
У меня есть список стран и столбцы нормализованного дохода следующим образом:
country income
--------------
es 500
gb 200
sg 300
id 500
de 450
То, что я пытаюсь сделать здесь, - это разбить страны на различные географические регионы и глобальный регион.
Регион ЕС будет содержать es (Испания), gb (Великобритания) и de (Германия). Азиатский регион будет содержать sg (Сингапур) и id (Индонезия)
Теперь я также хочу добавить каждую страну в глобальный географический регион, чтобы глобальный регион содержал все перечисленные выше страны.
Таким образом, это приведет к тому, что es (Испания) попадет под ЕС и Глобальный
Точно так же id (Индонезия) подпадает под Азию и Глобальный
Итоговая таблица будет выглядеть так:
region country income
-------------------------
EU es 500
EU gb 200
ASIA sg 300
ASIA id 500
EU de 450
Global es 500
Global gb 200
Global sg 300
Global id 500
Global de 450
Я думал о чем-то вроде заявления CASE
SELECT
CASE WHEN country IN ('es', 'gb', 'de')
THEN 'EU'
WHEN country IN ('id', 'sg')
THEN 'ASIA'
Но я не уверен, как получить глобальную группу отсюда. Это не должно быть сделано с помощью оператора CASE - открыт для предложений.
2 ответа
SELECT
CASE when country in ('es', 'gb', 'de') THEN 'EU'
when country in ('id', 'sg') THEN 'ASIA'
END as Region, country,income FROM country
UNION
SELECT 'Global',country,income
FROM country
Я бы сделал это с групповым назначением:
select reg.region, reg.country, income
from country c join
(select 'es' as country, 'EU' as region union all
select 'gb' as country, 'EU' as region union all
select 'de' as country, 'EU' as region union all
select 'id' as country, 'EU' as region union all
select 'sg' as country, 'EU' as region union all
select 'es' as country, 'GLOBAL' as region union all
select 'gb' as country, 'GLOBAL' as region union all
select 'de' as country, 'GLOBAL' as region union all
select 'id' as country, 'GLOBAL' as region union all
select 'sg' as country, 'GLOBAL' as region
) as reg
on c.country = reg.country;
Я был бы склонен поместить отображение страны / региона в отдельную таблицу.