如何将共享 id 的多行合并为一行(HQL)?
How to merge multiple rows sharing id into one single row (HQL)?
在长时间 JSON 解码结束时,我得到了这个 Hive table:
+----+--------+---------+--------+
| 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 |
+----+--------+---------+--------+
因此,我想将具有相同 ID 且在同一 table 内的多行合并到一行中。什么查询可以让我得到我正在寻找的结果?
使用 min()
或 max()
聚合:
select ID,
max(field1) as field1,
max(field2) as field2,
max(field3) as field3
from your_table
group by ID
在长时间 JSON 解码结束时,我得到了这个 Hive table:
+----+--------+---------+--------+
| 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 |
+----+--------+---------+--------+
因此,我想将具有相同 ID 且在同一 table 内的多行合并到一行中。什么查询可以让我得到我正在寻找的结果?
使用 min()
或 max()
聚合:
select ID,
max(field1) as field1,
max(field2) as field2,
max(field3) as field3
from your_table
group by ID