加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

SQL查询找到第N个最高薪水

发布时间:2021-01-25 02:36:07 所属栏目:编程 来源:网络整理
导读:我指的是以下查询来查找员工的第N个最高薪水. select sal from emp t where n = (select count(sal) from (select distinct sal from emp) where t.sal=sal); 一位老师嗣魅这个查询有用.有人可以表明怎样将COUNT(现实上是1到X之间的值,个中X是完全差异的人为)等

我指的是以下查询来查找员工的第N个最高薪水.

select sal from emp t where &n = (select count(sal) from (select distinct sal 
 from emp) where t.sal<=sal);

一位老师嗣魅这个查询有用.有人可以表明怎样将COUNT(现实上是1到X之间的值,个中X是完全差异的人为)等同于&n; n发生这个功效?

我试图相识数据库如安在内部处理赏罚此查询并天生功效?

感谢.

办理要领

起首,查询将返回第n个最低人为值.要返回第n个最高人为值,您必需将t.sal< = sal变动为t.sal> = sal.

接下来,此查询的事变道理是起首查找人为值的差异列表作为一个派生表,然后确定薪水小于此列表中每个薪水的员工数. t.sal< = sal正在获取派生表(大大都数据库必要具有别名)并将每个值与外部emp表举办较量.应该留意,在平手的环境下,这将返回多行. 要手动跟踪输出,我们必要一些输入:

Alice       | 200
Bob         | 100
Charlie     | 200
Danielle    | 150

Select Distinct sal
From emp

给我们

200
100
150

此刻我们说明外表中的每一行

Alice - There are 3 distinct salary values less than or equal to 200
Bob - 1 rows <= 100
Charlie - 3 rows <= 200
Danielle - 2 row <= 150

因此,对付每个人为值,我们获得以下计数(并按计数从头排序):

Bob 1
Danielle 2
Charlie 3
Alice 3

我以为你忽略的最重要的方面是外部emp表与内部计数计较相干(这就是它被称为相干子查询的缘故起因).即,对付外部emp表中的每一行,通过t.sal< = sal计较该行的人为的新计数.同样,大大都数据库体系都要求最内层的查询具有这样的别名(留意As Z别名):

Select sal
From emp As t
Where &n =  (
            Select Count(Z.sal)
            From    (
                    Select Distinct sal
                    From emp
                    ) As Z
            Where t.sal <= Z.sal
            )

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读