Сгруппировать и включить все категории в SQL

#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