在MySQL中不使用“LIMIT”查找第四或第n高工资
为了获得第四高的薪水,我使用了这个,但它不起作用,请帮助我在MySQL中进行一些其他查询在MySQL中不使用“LIMIT”查找第四或第n高工资,mysql,sql,Mysql,Sql,为了获得第四高的薪水,我使用了这个,但它不起作用,请帮助我在MySQL中进行一些其他查询 SELECT * FROM employee e1 WHERE ( 4 ) = ( SELECT COUNT( e2.salary ) FROM employee e2 WHERE e2.salary >= e1.salary ) 六个月前,我发现了同样的问题 员工表: 我是这样
SELECT *
FROM employee e1
WHERE ( 4 ) = ( SELECT COUNT( e2.salary )
FROM employee e2
WHERE e2.salary >= e1.salary
)
六个月前,我发现了同样的问题 员工表: 我是这样解决的:
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
SET @count := N;
RETURN (
# Write your MySQL query statement below.
SELECT tt.Salary
FROM
(
SELECT (@count := @count -1) AS c,t.Salary
FROM
(
SELECT
Salary
FROM
Employee
GROUP BY Salary
ORDER BY
Salary DESC
) AS t
WHERE @count >=1
) AS tt
WHERE tt.c=0
);
END
以下是提取的查询:
SET @count := N;
SELECT tt.Salary
FROM
(
SELECT (@count := @count -1) AS c,t.Salary
FROM
(
SELECT
Salary
FROM
Employee
GROUP BY Salary
ORDER BY
Salary DESC
) AS t
WHERE @count >=1
) AS tt
WHERE tt.c=0
说明:
getNthHighestSalary是一个以整数为单位的过程
参数,并返回第n个最高工资。
首先,变量计数设置为N。
最内部的select查询按降序对薪资进行排序。所以
最高的工资在第一排。
从这个结果集中,如果你下N步并停止,你将得到
第n高工资。
这就是结果。
效果不太好,但应该有效:
SET @i=0;
SET @N=4;
SELECT *
FROM (SELECT *, (@i:=@i+1) As num
FROM Employee
WHERE @i <= @N
ORDER BY salary) al
WHERE num = @N;
使用下面的查询-
SELECT salary
FROM employee AS t1
WHERE 4 =
(
SELECT COUNT(DISTINCT salary)
FROM employee AS t2
WHERE t1.salary<=t2.salary
) GROUP BY t1.salary;
出于好奇,您为什么不想使用限制?这将是实现这一点最简单的方法,也是对未来的开发人员(包括您未来的自己)最友好的方法。是的,“LIMIT”是最友好的方法,但它仅在mysql中使用
SELECT salary
FROM employee AS t1
WHERE 4 =
(
SELECT COUNT(DISTINCT salary)
FROM employee AS t2
WHERE t1.salary<=t2.salary
) GROUP BY t1.salary;