Как объединить несколько строк с общим идентификатором в одну строку (HQL)? - PullRequest
2 голосов
/ 01 марта 2020

В конце длинного JSON декодирования я получаю эту таблицу Hive:

+----+--------+---------+--------+
| ID | field1 | field2  | field3 |
+----+--------+---------+--------+
|  1 | T      | NULL    | NULL   |
|  1 | NULL   | 0103210 | NULL   |
|  1 | NULL   | NULL    | NULL   |
|  1 | NULL   | NULL    | NULL   |
|  1 | NULL   | NULL    | NULL   |
|  1 | NULL   | NULL    | NULL   |
|  1 | NULL   | NULL    | NULL   |
|  1 | NULL   | NULL    | NULL   |
|  1 | NULL   | NULL    | NULL   |
|  2 | T      | NULL    | NULL   |
|  2 | NULL   | NULL    | NULL   |
|  2 | NULL   | NULL    | NULL   |
|  2 | NULL   | NULL    | NULL   |
|  2 | NULL   | NULL    | NULL   |
|  2 | NULL   | NULL    | NULL   |
|  3 | NULL   | NULL    | NULL   |
|  4 | U      | NULL    | NULL   |
|  4 | NULL   | 0103212 | NULL   |
|  4 | NULL   | NULL    | NULL   |
|  4 | NULL   | NULL    | NULL   |
|  4 | NULL   | NULL    | NULL   |
|  4 | NULL   | NULL    | NULL   |
|  4 | NULL   | NULL    | NULL   |
|  4 | NULL   | NULL    | NULL   |
|  4 | NULL   | NULL    | NULL   |
|  4 | NULL   | NULL    | NULL   |
|  4 | NULL   | NULL    | NULL   |
+----+--------+---------+--------+

Это желаемый вывод:

+----+--------+---------+--------+
| ID | field1 | field2  | field3 |
+----+--------+---------+--------+
|  1 | T      | 0103210 | NULL   |
|  2 | T      | NULL    | NULL   |
|  3 | NULL   | NULL    | NULL   |
|  4 | U      | 0103212 | NULL   |
+----+--------+---------+--------+

Итак, я хочу объединить несколько строк с одинаковым идентификатором и в одной таблице в одной строке. Какой запрос может дать мне результат, который я ищу?

1 Ответ

2 голосов
/ 01 марта 2020

Агрегирование с использованием min() или max():

select ID, 
       max(field1) as field1,
       max(field2) as field2, 
       max(field3) as field3
  from your_table
 group by ID
...