#sql #join #data-manipulation #impala
#sql #Присоединиться #манипулирование данными #impala
Вопрос:
Мне нужно выбрать все группы в таблице для каждой категории, даже если эта группа отсутствует для данной категории (и указать 0 или NULL в качестве значения) Мне нужно сделать это с помощью SQL-запроса (Impala).
Ниже приведен пример (в основном мне нужно динамически отображать также последнюю строку во второй таблице).
Category Group Amount Category Group Amount
-------------------------------- --------------------------------
A X 1 A X 1
A Y 2 A Y 2
A Z 5 -> A Z 5
B X 2 B X 2
B Y 3 B Y 3
B Z 0
Кто-нибудь знает, как этого добиться? Спасибо!
Ответ №1:
Сначала вам нужно перекрестное объединение категорий и групп, а затем левое соединение:
select c.category, g.group, coalesce(amount, 0)
from
( -- all categories
select distinct Category from tab
) as c
cross join -- create all possible combinations
( -- all groups
select distinct group from tab
) as g
left join tab as a -- now join back the amount
on c.category = a.category
and g.group = a.Group