hive row_number() over()去重和group by的区别
时间: 2023-10-13 14:28:22 浏览: 218
`row_number() over()` 和 `group by` 都可以用于去除重复行,但它们的实现方式和作用范围有所不同。
`row_number() over()` 是一种窗口函数,它可以为每一行分配一个唯一的序号,序号的分配是基于指定的排序规则,如果有多行数据排序规则相同,则它们的序号也相同。通过使用 `row_number() over()` 函数并结合子查询,我们可以实现去重操作。例如,以下 SQL 语句可以获取表中每个不重复的 `name` 字段的第一行数据:
```
SELECT name, age, gender
FROM (
SELECT name, age, gender, row_number() over (partition by name order by age) as rn
FROM my_table
) t
WHERE rn = 1
```
`group by` 是一种聚合函数,它可以将表中的数据按照指定的字段分组,然后对每组数据执行聚合操作(例如 `count()`、`sum()`、`avg()` 等)。使用 `group by` 可以快速去除表中的重复行。例如,以下 SQL 语句可以获取表中每个不重复的 `name` 字段的第一行数据:
```
SELECT name, min(age), min(gender)
FROM my_table
GROUP BY name
```
总的来说,`row_number() over()` 适合于需要对数据进行排序和分组的场景,而 `group by` 则适合于需要对数据进行聚合操作的场景。
阅读全文