Sql 从表中找出第n个最高工资

Sql 从表中找出第n个最高工资,sql,oracle11g,greatest-n-per-group,Sql,Oracle11g,Greatest N Per Group,使用Oracle如何从上述表格中找到第n个最高工资?你可以在谷歌上找到很多东西 name salary ----- ----- mohan 500 ram 1000 dinesh 5000 hareesh 6000 mallu 7500 manju 7500 praveen 10000 hari 10000 你可以在谷歌上找到很多东西 name salary ----- ----- mohan 500 ram 1000

使用Oracle如何从上述表格中找到第n个最高工资?

你可以在谷歌上找到很多东西

name   salary
-----   -----
mohan     500
ram      1000
dinesh   5000
hareesh  6000
mallu    7500
manju    7500
praveen 10000
hari    10000

你可以在谷歌上找到很多东西

name   salary
-----   -----
mohan     500
ram      1000
dinesh   5000
hareesh  6000
mallu    7500
manju    7500
praveen 10000
hari    10000
将您的薪资编号传递给N,以代替N


传递您的工资号码以代替第n个

您可以使用类似的方式。。这是我测试过的,然后贴在这里

select * 
  from ( select s.*, rank() over (order by salary desc) as rownumber
           from salary )
 where rownumber = nth
在“tblname”的位置给出你的表名,然后在第n个位置给出你想要的第n个最高工资


您可以在屏幕截图中看到它正在工作。

您可以使用类似的功能。。这是我测试过的,然后贴在这里

select * 
  from ( select s.*, rank() over (order by salary desc) as rownumber
           from salary )
 where rownumber = nth
在“tblname”的位置给出你的表名,然后在第n个位置给出你想要的第n个最高工资

您可以在屏幕截图中看到它正在工作。

所有数据库的常规查询

SELECT *
FROM   tblname
WHERE  salary = (SELECT *
                 FROM   (SELECT *
                         FROM   (SELECT *
                                 FROM   (SELECT DISTINCT( salary )
                                         FROM   tblname
                                         ORDER  BY salary DESC) A
                                 WHERE  rownum <= nth) B
                         ORDER  BY salary ASC) C
                 WHERE  rownum <= 1) 
用给定的数字替换n。 例如,获得第三高的薪水

SELECT DISTINCT salary FROM emp X WHERE n = 
    ( SELECT COUNT(DISTINCT salary) FROM emp WHERE salary >=X.salary )

在任何编程语言中

按薪资从emp订单中选择*

然后用编程语言JAVA、.net或php迭代结果集

Mysql 所有数据库的通用查询

SELECT *
FROM   tblname
WHERE  salary = (SELECT *
                 FROM   (SELECT *
                         FROM   (SELECT *
                                 FROM   (SELECT DISTINCT( salary )
                                         FROM   tblname
                                         ORDER  BY salary DESC) A
                                 WHERE  rownum <= nth) B
                         ORDER  BY salary ASC) C
                 WHERE  rownum <= 1) 
用给定的数字替换n。 例如,获得第三高的薪水

SELECT DISTINCT salary FROM emp X WHERE n = 
    ( SELECT COUNT(DISTINCT salary) FROM emp WHERE salary >=X.salary )

在任何编程语言中

按薪资从emp订单中选择*

然后用编程语言JAVA、.net或php迭代结果集

Mysql
您已将您的问题标记为Oracle,这样您就可以使用该函数。。。不幸的是,这是一个分析函数,但您的查询将简化为:

SELECT DISTINCT salary FROM emp X order by salary desc limit n,1
从12c开始,Oracle终于赶上了世界其他地区,并包含了偏移量,因此您可以使用它:

select distinct nth_value(salary, 3) over ()
  from employees 

您已将您的问题标记为Oracle,这样您就可以使用该函数。。。不幸的是,这是一个分析函数,但您的查询将简化为:

SELECT DISTINCT salary FROM emp X order by salary desc limit n,1
从12c开始,Oracle终于赶上了世界其他地区,并包含了偏移量,因此您可以使用它:

select distinct nth_value(salary, 3) over ()
  from employees 

以简单的方式选择第n个最高工资

select salary
  from employees
 order by salary
offset n - 1
 fetch next row only

其中n=您想要的第n个数字

用简单的方法选择第n个最高工资

select salary
  from employees
 order by salary
offset n - 1
 fetch next row only
其中n=您想要的第n个数字

深入讨论了这个问题,下面我将引用其中的代码:注意:请参阅Oracle的下面两个解决方案

解决方案1:在SQL Server、MySQL、DB2、Oracle、Teradata和几乎任何其他RDBMS中,这种能够找到第n个最高工资的SQL应该都能工作:注意:由于子查询,性能低下

SELECT emp_no, sal
FROM
(
select emp_no, sal, ROW_NUMBER() OVER (order by sal desc) RN 
from emp 
order by sal desc
)
WHERE RN = n;
在上面的查询中需要了解的最重要的一点是,每次外部查询处理一行时,都会计算子查询。换句话说,内部查询不能独立于外部查询进行处理,因为内部查询也使用Emp1值

为了找到第N个最高工资,我们只需找到N-1个工资正好大于其本身的工资

解决方案2:在SQL Server中使用TOP关键字查找第n个最高工资

SELECT * /*This is the outer query part */
FROM Employee Emp1
WHERE (N-1) = ( /* Subquery starts here */
SELECT COUNT(DISTINCT(Emp2.Salary))
FROM Employee Emp2
WHERE Emp2.Salary > Emp1.Salary)
解决方案3:在不使用TOP的情况下,在SQL Server中查找第n个最高薪资

SELECT TOP 1 Salary
FROM (
      SELECT DISTINCT TOP N Salary
      FROM Employee
      ORDER BY Salary DESC
      ) AS Emp
ORDER BY Salary
请注意,我还没有亲自测试过上面的SQL,我相信它只能在SQL Server 2012及更高版本中工作

解决方案4:在MySQL中工作

SELECT Salary FROM Employee 
ORDER BY Salary DESC OFFSET N-1 ROW(S) 
FETCH FIRST ROW ONLY
LIMIT子句在该查询中接受两个参数–第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数

解决方案5:在Oracle中工作

SELECT Salary FROM Employee 
ORDER BY Salary DESC LIMIT n-1,1
解决方案6:以Oracle方式2工作

select * from (
  select Emp.*, 
row_number() over (order by Salary DESC) rownumb 
from Employee Emp
)
where rownumb = n;  /*n is nth highest salary*/
深入讨论了这个问题,我将在下面引用其中的代码:注意:请参阅Oracle的下面2个解决方案

解决方案1:在SQL Server、MySQL、DB2、Oracle、Teradata和几乎任何其他RDBMS中,这种能够找到第n个最高工资的SQL应该都能工作:注意:由于子查询,性能低下

SELECT emp_no, sal
FROM
(
select emp_no, sal, ROW_NUMBER() OVER (order by sal desc) RN 
from emp 
order by sal desc
)
WHERE RN = n;
在上面的查询中需要了解的最重要的一点是,每次外部查询处理一行时,都会计算子查询。换句话说,内部查询不能独立于外部查询进行处理,因为内部查询也使用Emp1值

为了找到第N个最高工资,我们只需找到N-1个工资正好大于其本身的工资

解决方案2:在SQL Server中使用TOP关键字查找第n个最高工资

SELECT * /*This is the outer query part */
FROM Employee Emp1
WHERE (N-1) = ( /* Subquery starts here */
SELECT COUNT(DISTINCT(Emp2.Salary))
FROM Employee Emp2
WHERE Emp2.Salary > Emp1.Salary)
解决方案3:在不使用TOP的情况下,在SQL Server中查找第n个最高薪资

SELECT TOP 1 Salary
FROM (
      SELECT DISTINCT TOP N Salary
      FROM Employee
      ORDER BY Salary DESC
      ) AS Emp
ORDER BY Salary
请注意,我还没有亲自测试过上面的SQL,我相信它只能在SQL Server 2012及更高版本中工作

解决方案4:在MySQL中工作

SELECT Salary FROM Employee 
ORDER BY Salary DESC OFFSET N-1 ROW(S) 
FETCH FIRST ROW ONLY
LIMIT子句在该查询中接受两个参数–第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数

解决方案5:在Oracle中工作

SELECT Salary FROM Employee 
ORDER BY Salary DESC LIMIT n-1,1
解决方案6:以Oracle方式2工作

select * from (
  select Emp.*, 
row_number() over (order by Salary DESC) rownumb 
from Employee Emp
)
where rownumb = n;  /*n is nth highest salary*/

请参阅以下查询以获取第n个最高工资。这样你就可以得到第n高的薪水。如果你想得到第n个最低工资,你只需要 在查询中用ASC替换DESC。

请参考以下查询以获取第n个最高工资。这样你就可以得到第n高的薪水。如果您只想获得第n个最低工资,则需要在查询中将DESC替换为ASC。 声明M INT; 设置M=N-1; 从员工中选择不同的薪资 按薪资描述限额M排序,1

声明M INT; 设置M=N-1; 从员工中选择不同的薪资
按薪资描述限额M排序,1

在MySql中,运行以下SQL以查找第n个最高工资:

select * from 
(
    select sal, rank() over (order by sal DESC/ASC) rnk 
    from emp
) 
where rnk = 1/2/3/4/5/6/...;
SELECT distinct(salary), emp_id, name 
       FROM `emp_salary` 
       group by salary 
       order by salary desc limit N-1,1;
e、 g第三高工资:

select * from 
(
    select sal, rank() over (order by sal DESC/ASC) rnk 
    from emp
) 
where rnk = 1/2/3/4/5/6/...;
SELECT distinct(salary), emp_id, name 
       FROM `emp_salary` 
       group by salary 
       order by salary desc limit N-1,1;
e、 g根据asc查找第三低工资订单:

SELECT distinct(salary), emp_id, name 
       FROM `emp_salary` 
       group by salary 
       order by salary desc limit 2,1;

在MySql中,运行以下SQL以查找第n个最高工资:

select * from 
(
    select sal, rank() over (order by sal DESC/ASC) rnk 
    from emp
) 
where rnk = 1/2/3/4/5/6/...;
SELECT distinct(salary), emp_id, name 
       FROM `emp_salary` 
       group by salary 
       order by salary desc limit N-1,1;
e、 g第三高工资:

select * from 
(
    select sal, rank() over (order by sal DESC/ASC) rnk 
    from emp
) 
where rnk = 1/2/3/4/5/6/...;
SELECT distinct(salary), emp_id, name 
       FROM `emp_salary` 
       group by salary 
       order by salary desc limit N-1,1;
e、 g根据asc查找第三低工资订单:

SELECT distinct(salary), emp_id, name 
       FROM `emp_salary` 
       group by salary 
       order by salary desc limit 2,1;

在Sql server 2012及更高版本中。有关详细信息,请参阅此链接


在Sql server 2012及更高版本中。有关详细信息,请参阅此链接


在Oracle中尝试以下操作:

 Use AdventureWorks /* AdventureWorks 2014 DB*/

Select distinct(CommissionPct) from Sales.SalesPerson
order by CommissionPct desc OffSet 3 Rows Fetch next 1 Rows only

--This for 4Th highest value (N-1)

干杯

在Oracle中尝试以下操作:

 Use AdventureWorks /* AdventureWorks 2014 DB*/

Select distinct(CommissionPct) from Sales.SalesPerson
order by CommissionPct desc OffSet 3 Rows Fetch next 1 Rows only

--This for 4Th highest value (N-1)

干杯

我们可以通过相关子查询来实现这一点

SELECT *
FROM
  (SELECT rownum AS rn,
    a.*
  FROM
    (WITH DATA AS -- creating dummy data
    ( SELECT 'MOHAN' AS NAME, 200 AS SALARY FROM DUAL
    UNION ALL
    SELECT 'AKSHAY' AS NAME, 500 AS SALARY FROM DUAL
    UNION ALL
    SELECT 'HARI' AS NAME, 300 AS SALARY FROM DUAL
    UNION ALL
    SELECT 'RAM' AS NAME, 400 AS SALARY FROM DUAL
    )
  SELECT D.* FROM DATA D ORDER BY SALARY DESC
    ) A
  )
WHERE rn = 3; -- specify N'th highest here (In this case fetching 3'rd highest)
欲了解更多信息,请查看此链接。。
我们可以通过相关子查询来实现这一点

SELECT *
FROM
  (SELECT rownum AS rn,
    a.*
  FROM
    (WITH DATA AS -- creating dummy data
    ( SELECT 'MOHAN' AS NAME, 200 AS SALARY FROM DUAL
    UNION ALL
    SELECT 'AKSHAY' AS NAME, 500 AS SALARY FROM DUAL
    UNION ALL
    SELECT 'HARI' AS NAME, 300 AS SALARY FROM DUAL
    UNION ALL
    SELECT 'RAM' AS NAME, 400 AS SALARY FROM DUAL
    )
  SELECT D.* FROM DATA D ORDER BY SALARY DESC
    ) A
  )
WHERE rn = 3; -- specify N'th highest here (In this case fetching 3'rd highest)
欲了解更多信息,请查看此链接。。

根据薪资描述限制n-1,1从emp_表顺序中选择不同的薪资

根据薪资描述限制n-1,1从emp_表顺序中选择不同的薪资

SELECT Salary
FROM Employee E1
WHERE N-1 = (SELECT COUNT(*)
         FROM Employee E2
         WHERE E1.salary <E2.Salary) 
它在甲骨文中非常有效。您可以使用ROW_NUMBER函数来代替密集_RANK,但它仅选择一条记录或一行作为最高工资,即使有两名或两名以上的员工拥有相同的工资



它在甲骨文中非常有效。您可以使用ROW_NUMBER函数来代替密集_RANK,但它仅选择一条记录或一行作为最高工资,即使有两名或两名以上的员工拥有相同的工资

我错过了最后一场比赛。现在试试,我错过了最后一个。现在就试试。选择*从第二个薪资等级中选择*从第二个薪资等级中选择*从第二个薪资等级中选择*在第二个薪资等级中,rownumber=3i尝试上面提到的查询您的薪资列的数据类型应该是什么。尝试使用其他数字数据类型,如int float decimal。缺少表达式意味着缺少逗号或括号。缺少一个点@kuldeep。。。您可能还应该使用ROW_NUMBER,因为如果出现平局,排名将提供相同的值。从select rank overorder by salary DESC as rownumber中选择*从select rank overorder as SalaryRank中选择*从SEXT_salary SalaryRank中选择,其中rownumber=3我尝试上述查询您的薪资列的数据类型应该是什么。尝试使用其他数字数据类型,如int float decimal。缺少表达式意味着缺少逗号或括号。缺少一个点@kuldeep。。。您可能还应该使用ROW_NUMBER来代替,因为如果出现平局,排名将提供相同的值。您可以看到,此解决方案适用于oracle。对于sql,这将是非常不同的…抱歉,但看到这个。。。这与我在回答中发布的完全相同。。。这是工作良好…也在你的链接。。。第三高的是10000而不是5000,因为有一个hari2和20000,然后是hari1和13000。。。请你自己看看我知道了,高拉夫。你的解决方案是正确的。错误是对订单的错误理解。不用担心。。。我只希望其他认为这个答案正确且有帮助的人。。你可以看到这个解决方案是针对oracle的。对于sql,这将是非常不同的…抱歉,但看到这个。。。这与我在回答中发布的完全相同。。。这是工作良好…也在你的链接。。。第三高的是10000而不是5000,因为有一个hari2和20000,然后是hari1和13000。。。请你自己看看我知道了,高拉夫。你的解决方案是正确的。错误是对订单的错误理解。不用担心。。。我只希望其他认为这个答案正确且有帮助的人。。在这篇文章中提到了两次,并给出了mysql的说明。不幸的是,Oracle并没有类似运算符的限制。在这个线程中提到了两次,并向mysql提供了说明。不幸的是,Oracle没有类似运算符的限制。使用RANK或DENSE_RANK,哪个更适合您的情况。使用RANK或DENSE_RANK,哪个更适合您的情况。选择sal,ename,n_valuesal,scott的3。除非按顺序选择select sal,ename,n_valuesal,否则emp不会给出正确的结果,3来自scott.emp订单由sal选择sal,ename,n_valuesal,3来自scott.emp这也在工作选择sal,ename,n_valuesal,3来自scott.emp不会给出正确的结果,除非它是由sal选择sal,ename,n_valuesal,3来自scott.emp订单由salselect sal,ename,n_valuesal,从scott.emp传过来这也起作用了