Sql — получение суммы значений в таблице для определенного идентификатора

#sql #hive #sum

#sql #улей #сумма

Вопрос:

У меня есть 2 таблицы

 X                
-----------------
id      | value  
1       |    10  
2       |    20

Y
----------------
id     |    value
2      |      30
  

затем вывод должен быть

 result
-----------------
id     |   value
1      |     10
2      |     50     (20   30) from both the tables
  

Я должен сделать это в hive.

Комментарии:

1. Может id повторяться в любой таблице?

Ответ №1:

Это выглядит как left join :

 select x.id, (x.value   coalesce(y.value, 0)) as value
from x left join
     y
     on x.id = y.id
  

Комментарии:

1. При таком подходе будут пропущены любые идентификаторы в таблице y, но не в x.

2. @Jabs . . . В заданном вопросе все идентификаторы в результирующем наборе находятся в таблице X. Самая простая интерпретация вопроса заключается в том, что это то, чего хочет OP. Возможно, вы правы, но вам следует задать это как вопрос оператору.

Ответ №2:

Вы можете попробовать этот приведенный ниже вариант с ОБЪЕДИНЕНИЕМ ВСЕХ и ГРУППИРОВАНИЕМ ПО-

 SELECT id, SUM(value) Value 
FROM 
(
    SELECT id, value FROM X
    UNION ALL
    SELECT id, value FROM Y
) A
GROUP BY id
  

Ответ №3:

Если обе таблицы имеют несовпадающий список идентификаторов, мы можем использовать полное внешнее объединение для получения результатов. Пожалуйста, рассмотрите приведенный ниже запрос:

 select x.id,NVL(x.value,0) NVL(y.value,0) value from x full outer join y on x.id=y.id;