先看数据:employee 表里有员工id和对应的薪水

问题1:选取薪水前50%的员工id。
1)分桶:
SELECT
id,
salary,
NTILE(2) over(ORDER BY salary) rnk
FROM employee;
结果:如下图,将数据分成了两部分,由于我这里是按照降序排列的,所以选择rnk=2的就可以了。

2)选择数据:
SELECT
id
FROM(
SELECT
id,
salary,
NTILE(2) over(ORDER BY salary) rnk
FROM employee
) a
WHERE rnk=2
问题2:选取每个部门工资排名第一的员工id
1)找出最高薪水
SELECT
id,
dept_id,
salary,
NTH_VALUE(salary,1) over(PARTITION BY dept_id ORDER BY salary DESC) first_salary
FROM employee;

2)where进行筛选
SELECT
a.id
FROM(
SELECT
id,
dept_id,
salary,
NTH_VALUE(salary,1) over(PARTITION BY dept_id ORDER BY salary DESC) first_salary
FROM employee
) a
WHERE a.salary=a.first_salary;

网友评论