今天遇到了一道面试题:已知员工表和部门表,让查询出每个部门内的薪资前三名的员工信息。
示例结果如下:
员工表:
部门表:
下面是查询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;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/142710.html