问一个关于数据查询的面试题,在网上找了半天没找到。

一个表(emp)中有四个字段:员工号(empid),员工姓名(empname),部门号(deptid),工资(salary),查出每个部门工资在前三的员工信息

select deptid, empname, salary
from emp e1
where
(
select count(1)
from emp e2
where e2.deptid=e1.deptid and e2.salary>=e1.salary
) <=3 /*这里的数值表示你想取前几名*/
order by deptid, salary desc;追问

谢谢,我试了一下,是可以的,但是不明白是啥意思。。

追答

用emp1单个员工的工资分别和 emp2的所有员工的工资做比较,如果比e1.salary =3就过滤(例如、4000、3000、2000,1000;比1000大的有4个那么1000就过滤掉)理解了吗?

温馨提示:答案为网友推荐,仅供参考