oracle - 谁能解释这个查询是如何工作的?
问题描述
这是一个 SQL 查询,用于查找第 N 个最高薪水的员工:
SELECT *
FROM emp t
WHERE 1 = (SELECT COUNT(DISTINCT sal)
FROM emp t2
WHERE t2.sal > t.sal)
我不知道它如何返回结果。如果在WHERE
子句中输入 1,它将返回第二高的薪水,而 2 则返回第三高的薪水,依此类推。
请解释查询,因为我不确定。
解决方案
让我首先说编写查询的更好方法是:
select e.*
from (select e.*, dense_rank() over (order by sal desc) as seqnum
from emp e
) e
where seqnum = 2;
您的查询在做什么?一步一步来:
- 外部查询对
emp
. - 比较计算大于行中薪水的不同薪水的数量。
- 如果恰好有 1 个更大的薪水,则保留该行。
换句话说,这是保留所有薪水第二高的行。 dense_rank()
是编写查询的一种更明智的方式(并且它也具有更好的性能)。
推荐阅读
- ruby-on-rails - Gem 安装错误版本的 bundler
- javascript - 如何在 VueJS 中读取 Firebase 数据?
- javascript - 递归函数类型如何推导流程?
- javascript - onChange 输入类型[复选框] 不适用于 Vue 样式的组件
- python - 使用 Python3.7 进行网页抓取:ConnectionError: HTTPSConnectionPool(host='www.google.com', port=443):
- ios - 自动将WKWebView 中的 HTML 保存到应用程序的 tmp 目录
- python - 为什么 python open() 函数不会在与主机文件相同的文件夹中创建 .txt 文件?
- github-webhook - 为什么 github-webhook 有效载荷包含“zen”?
- docker - 泊坞窗中的 SPRING_APPLICATION_JSON
- lotus-notes - Lotus Notes 多日活动