SQL查询从工资表中查找第N个最高薪水

jau*_*wad 11 mysql

有人帮我从MYSQL的工资表中找出第n个最高工资

bab*_*ney 37

试试这个,n将是你想要返回的第n个项目

 SELECT DISTINCT(Salary) FROM table ORDER BY Salary DESC LIMIT n,1
Run Code Online (Sandbox Code Playgroud)

  • 你的查询将从表中返回第(n + 1)条记录,它应该是`SELECT DISTINCT(Salary)FROM table ORDER BY Salary DESC LIMIT(n-1),1 (23认同)
  • @Vish OP只要求最高的工资,而不是工资最高的员工。在这种情况下,您可以将其与 SELECT Employee FROM table WHERE Salary IN (已回答的查询)嵌套。 (3认同)

小智 19

如果你想从表中找到第n个薪水(这里的n应该是第1或第2或第15个最高工资)

这是查找第n个薪水的查询:

SELECT DISTINCT Salary FROM tblemployee ORDER BY Salary DESC LIMIT 1 OFFSET (n-1)
Run Code Online (Sandbox Code Playgroud)

如果你想找到第8个最高薪水,查询应该是:

SELECT DISTINCT Salary FROM tblemployee ORDER BY Salary DESC LIMIT 1 OFFSET 7
Run Code Online (Sandbox Code Playgroud)

注意: OFFSET从第0位开始,因此在此处使用N-1规则


Ome*_*esh 13

要获得第n个最高薪水,您需要首先使用数据排序数据ORDER BY,然后使用LIMITwith 选择第n个最高记录OFFSET.

SELECT DISTINCT(salary) AS salary
FROM tbl_salary
ORDER BY salary DESC
LIMIT 1 OFFSET (n - 1);
Run Code Online (Sandbox Code Playgroud)


Abh*_*rni 8

SELECT * FROM Employee Emp1 
WHERE (N-1) = ( 
    SELECT COUNT(DISTINCT(Emp2.Salary)) 
    FROM  Employee Emp2 
    WHERE Emp2.Salary > Emp1.Salary)
Run Code Online (Sandbox Code Playgroud)

对于外部查询处理的每条记录,将执行内部查询,并将返回记录的工资少于当前工资的记录数.如果您正在寻找第二高薪,那么只要内部查询返回N-1,您的查询就会停止.


278*_*184 8

寻找最高薪水

select MAX(Salary) from Employee;
Run Code Online (Sandbox Code Playgroud)

找到第二高的工资

查询 1

SELECT MAX(Salary) FROM Employee
WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee);
Run Code Online (Sandbox Code Playgroud)

查询 2

select MAX(Salary) from Employee
WHERE Salary <> (select MAX(Salary) from Employee )
Run Code Online (Sandbox Code Playgroud)

找到第 n 个最高工资

查询 1

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)
Run Code Online (Sandbox Code Playgroud)

查询 2

SELECT *
FROM Employee Emp1
WHERE (1) = (
SELECT COUNT(DISTINCT(Emp2.Salary))
FROM Employee Emp2
WHERE Emp2.Salary > Emp1.Salary)
Run Code Online (Sandbox Code Playgroud)

在 SQL Server 中使用 TOP 关键字的第 n 高薪水

SELECT TOP 1 Salary
FROM (
      SELECT DISTINCT TOP N Salary
      FROM Employee
      ORDER BY Salary DESC
      ) AS Emp
ORDER BY Salary
Run Code Online (Sandbox Code Playgroud)

在 MySQL 中查找第 n 个最高薪水

SELECT Salary FROM Employee 
ORDER BY Salary DESC LIMIT n-1,1
Run Code Online (Sandbox Code Playgroud)

在 SQL Server 中查找第 n 个最高薪水

SELECT Salary FROM Employee 
ORDER BY Salary DESC OFFSET N-1 ROW(S) 
FETCH FIRST ROW ONLY
Run Code Online (Sandbox Code Playgroud)

使用 rownum 在 Oracle 中查找第 n 个最高薪水

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

使用 RANK 在 Oracle 中查找第 n 个最高薪水

select * FROM (
select EmployeeID, Salary
,rank() over (order by Salary DESC) ranking
from Employee
)
WHERE ranking = N;
Run Code Online (Sandbox Code Playgroud)