Presto 常见开窗函数教程

字段和 comment

name 姓名
dep_id 部门 id
emp_id 员工 id
sal 工资
job 岗位类型
time 入职时间

-- 查询姓名, 部门编号,工资以及部门人数
select
    name
    , dep_id
    , sal
    , count(*) over (partition by dep_id) cnt
from hive.test.dep_user_info

--查询姓名,部门编号,工资以及每个部门的总工资,部门总工资按照降序输出
select
    name
    , dep_id
    , sal
    , sum(sal) over (partition by dep_id) "部门总工资"
from hive.test.dep_user_info
order by 4 desc



--查询姓名,部门编号,工资,排名编号(按照工资的多少排名)
select
    name
    , dep_id
    , sal
    , row_number() over (order by sal desc) num
from hive.test.dep_user_info

-------------------------rank--------------------
-- 使用 rank 查看排名
select
    name
    , dep_id
    , sal
    , rank() over (order by sal desc) num
from hive.test.dep_user_info


-- 查询每个部门工资最高的两个人的信息(姓名,部门,薪水)
select
    name
    , dep_id
    , sal
from (
    select
        name
        , dep_id
        , sal
        , row_number() over (partition by dep_id order by sal desc) num
    from hive.test.dep_user_info
) t1
where t1.num <= 2



--查询每个部门的员工工资排名信息
select
    name
    , sal
    , dep_id
    , row_number() over (partition by dep_id order by sal desc)
from hive.test.dep_user_info

-- 使用nitil
-- nitil 将一个有序的数据集分为多个桶(bucket), 并未每行分配一个适当的桶数;
-- 可用于将数据划分为相等的小切片,为每一行分配该小切片的数字序号;
select
    name
    , dep_id
    , sal
    , ntile(4) over (order by sal desc) as ntile
from hive.test.dep_user_info



-- 使用聚合函数的情况
select
    dep_id
    , row_number() over (partition by dep_id order by sum(sal)) as rank
from hive.test.dep_user_info
group by 1



-- first_value() or last_value() 使用
select
    name
    , sal
    , dep_id
    , first_value(sal) over (partition by dep_id order by sal desc)
from hive.test.dep_user_info



-- 加 partition by和不加 partition by的区别在于,加上表示的是会根据 partition by后面的字段进行分组(window),不加表示整个数据是一个 window
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值