#sql #hive
#sql #улей
Вопрос:
У меня есть три колонки: отправляющая организация, принимающая организация и количество участников. Как я могу показать для каждой отправляющей организации принимающую организацию с наибольшим количеством участников? Некоторые строки имеют одинаковые значения для отправки и получения, поэтому я должен суммировать составные части для этих строк.
Es:
отправка | получение | УЧАСТНИКИ |
---|---|---|
A | B | 10 |
A | C | 9 |
A | B | 2 |
B | C | 11 |
B | D | 4 |
B | D | 5 |
C | E | 1 |
Ожидаемый результат | : |
---|---|
A | B |
B | C |
C | E |
Ответ №1:
Я думаю, что лучшим способом будет использовать функцию окна:
SELECT sending, FIRST_VALUE(receiving) OVER ( PARTITION BY sending ORDER BY partecipants DESC ) receiving FROM ttable GROUP BY sending
На самом деле я не понял часть вашего вопроса, касающуюся некоторых сумм ценностей. Если вам придется их выполнить, вы можете ttable
заменить подзапросом (SELECT SUM(...) ....)
Ответ №2:
Отказ от ответственности: этот запрос был протестирован в MySQL, а не в Hive.
Вы можете сделать:
select * from ( select sending, receiving, rank() over(order by sum(partecipants) desc) as rk from t group by sending, receiving ) x where rk = 1