MySql: ntile()和nth_value的使用

先看数据: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;


你可能感兴趣的:(MySql: ntile()和nth_value的使用)