今天遇到了一道面试题:已知员工表和部门表,让查询出每个部门内的薪资前三名的员工信息。
示例结果如下:
员工表:
部门表:
下面是查询SQL:
这个SQL的关键部分就是这个where子查询,
此处用到了where子查询,及内部的自连接
当count(*) =0时.......
当count(*)=1时........
当count(*)=2时.......
经过上面三种情况的过滤筛选后,employee e2 表中的数据,都是此需求要保留查询的数据。
SELECT
b.departmentName,
a.`name`,
a.sal
FROM
(
SELECT
e2.deparmentId,
e2.`name`,
e2.sal
FROM
employee e2
WHERE
(
SELECT
count(*)
FROM
employee e1
WHERE
e1.sal > e2.sal
AND e1.deparmentId = e2.deparmentId
) < 3
) a
LEFT JOIN department b ON a.deparmentId = b.id
ORDER BY
a.deparmentId,
a.sal DESC;