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 ) (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |