group by:对检索结果的保留行进行单纯分组,返回聚合之后的组的数据统计值的记录。划分为多组,每组返回一行。
partition by:返回分组里的每一条数据,在应用关联的开窗函数前确定行集的分区和排序,然后,开窗函数将计算窗口中的每一行的值。
例:
表中的数据如下
create temp table test as
select ‘A01’ as A,‘001’ as B,10 as C
union select ‘A01’, ‘001’, 20
union select ‘A02’, ‘002’, 20
;
A | B | C |
---|---|---|
A01 | 001 | 10 |
A01 | 001 | 20 |
A02 | 002 | 20 |
分别运行group by和partition by
SELECT A,B,MAX(C) OVER( PARTITION BY A,B)
FROM TEST
;
结果为
A | B | MAX |
---|---|---|
A01 | 001 | 20 |
A01 | 001 | 20 |
A02 | 002 | 20 |
SELECT A,B,MAX(C)
FROM TEST
GROUP BY 1,2
;
结果为
A | B | MAX |
---|---|---|
A01 | 001 | 20 |
A02 | 002 | 20 |