话不多说,看代码
需求是:分组统计
传统分组统计sql,在Mysql和hive中是通用的
模型
create table tab(id string,part string)
统计每个part有多少个id
先说一下标准写法
select
count(*)
from tab
group by part;
下面看一下over开窗写法和问题
写法一:
select
part,
count(*) over(partition by part)
from
tab
group by part
;
写法一的结果是每个part的值是1
part | value |
part1 | 1 |
part2 | 1 |
正确写法如下:
select
*
from
(
select
part,
count(*) over(partition by part) rs
from
tab
)tmp
group by part,rs
;
这样写法和传统写法结果是一致的
原理和测试截图下次再补