当N = 0时在选择查询的限制子句中使用N-1时发生运行时错误

Ame*_*ain 5 mysql runtime-error

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  RETURN (
    SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT N-1,1
);
END
Run Code Online (Sandbox Code Playgroud)

当M = 0变为-1时,该查询会给出异常,但是当我这样写时

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
DECLARE M INT;
SET M=N-1;
  RETURN (
    SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT M,1
);
END
Run Code Online (Sandbox Code Playgroud)

请解释这两个语句之间的区别。当我设置M = N-1时,当N = 0时m也会为负,因此出现以下异常

Line 6: SyntaxError: near '-1,1
);
END'
Run Code Online (Sandbox Code Playgroud)

Geo*_*ard 8

我不确定这是否有帮助。但这看起来像是 Leet Code 中的问题(https://leetcode.com/problems/nth-highest-salary)。我运行了下面的代码,它对我有用。

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
DECLARE M INT;
SET M=N-1;
RETURN (
   select distinct
       Salary
   from 
       Employee
   Order by 1 desc
   limit M, 1

   );
   END
Run Code Online (Sandbox Code Playgroud)

这是提交结果: 在此输入图像描述

希望这可以帮助!


sam*_* sy 2

我在这方面迟到了,但我也为这个问题苦苦挣扎。花了几个小时调试这个。您始终可以在条款中检查此条件where。检查下面的查询。

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
DECLARE M INT;
SET M = -1;
 RETURN (
    select distinct salary from employee where M > 0 order by salary desc limit M,1
 );
END
Run Code Online (Sandbox Code Playgroud)

limit 中的参数也很混乱。在某些情况下offset不支持。有一个简单的例子。

limit a,b;
Run Code Online (Sandbox Code Playgroud)

我们可以将上面的内容读作

从 a 开始,在 b 个条目之后停止。

干杯!