【发布时间】:2017-01-10 17:48:13
【问题描述】:
我正在运行以下查询以从员工表中获得第三高的薪水,并且它工作正常,但我无法理解它的逻辑。子查询值如何与主查询匹配(左部分)。有人可以解释一下这个查询背后的逻辑是什么吗?
select e1.salary
from employee as e1
where 3 = (select count(salary)
from employee as e2
where e1.salary<=e2.salary)
PS:我可以理解count() 返回的行数(所有记录都是唯一的)。
【问题讨论】:
-
对于了解非常基础的人;为什么要这么复杂?你不能用 RANK 或 ROW_NUMBER 和 ORDER BY 来完成这个吗?像 OP 示例那样做有继承价值吗?
-
@StianYttervik 我猜写它的人不知道 RANK 或 ROW_NUMBER 存在
-
好的,关闭选民。你们都错了吗?这远不及是一个推荐问题。 (说真的,你从哪里得到的?)而且这个问题很清楚,有几个很好的答案解释了查询的作用。我什至认为这个问题不是“基本的”;当您仍在掌握 SQL 基础知识时,被该查询弄糊涂并不是没有道理的。 (哎呀,即使您熟悉 SQL,也可能需要花一分钟的时间盯着它看。)如果您要投票结束,首先找出一个好的理由。
-
@jpmc26 - 我同意。我想问题出在标题上,而人们没有阅读除此之外的内容。如果它的标题是“如何选择表格中第三高的值?”它可能会获得更少的接近票。
标签: sql sql-server