字段和 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