Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中不使用“LIMIT”查找第四或第n高工资_Mysql_Sql - Fatal编程技术网

在MySQL中不使用“LIMIT”查找第四或第n高工资

在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 ) 六个月前,我发现了同样的问题 员工表: 我是这样

为了获得第四高的薪水,我使用了这个,但它不起作用,请帮助我在MySQL中进行一些其他查询

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;