У меня есть требование сгруппировать результаты из tableA_index, а затем объединить его с таблицей B, чтобы получить следующие результаты.
количество tb2_c1, присутствующих как в tableA_index, так и в tableB
количество tb2_c1, присутствующих только в таблицеA_index
количество tb2_c1, присутствующих только в таблице B
Окончательный результат должен выглядеть примерно так:
c3 | c1 | common_c1s | tableA_only_c1s | tableB_only_c1s
| | | |
| | | |
Я пробовал приведенное ниже решение в Impala, но по какой-то причине это не работает.
select
ures.c3 c3, ures.c1 c1, count(t1.tb2_c1) common_c1s, count(t2.tb2_c1) tableA_only_c1s, count(t3.tb2_c1) tableB_only_c1s
from (
select c1, c2, c3 from tableA_0
UNION
select c1, c2, c3 from tableA_1
UNION
select c1, c2, c3 from tableA_2
UNION
select c1, c2, c3 from tableA_3
UNION
select c1, c2, c3 from tableA_4
UNION
select c1, c2, c3 from tableA_5
) ures
INNER JOIN
( select tb2_c1, tb2_c2 from tableB ) t1
ON t1.tb2_c1 = ures.c2
AND t1.tb2_c2 = ures.c3
LEFT SEMI JOIN
( select tb2_c1, tb2_c2 from tableB ) t2
ON t2.tb2_c1 = ures.c2
AND t2.tb2_c2 = ures.c3
LEFT ANTI JOIN
( select tb2_c1, tb2_c2 from tableB ) t3
ON t3.tb2_c1 = ures.c2
AND t3.tb2_c2 = ures.c3
GROUP BY c3, c1