当N = 0时,在select查询的limit子句中使用N-1时出现运行时错误

时间:2015-06-08 06:23:51

标签: 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

此查询在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

请解释两个陈述之间的区别。当我设置M = N-1时,当N = 0时m也将为负,它给出以下异常

Line 6: SyntaxError: near '-1,1
);
END'

3 个答案:

答案 0 :(得分:1)

我迟到了,但我也在努力解决这个问题。花了几个小时调试这个。您始终可以在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

限制中的参数也令人困惑。在某些情况下,不支持offset。这有一个简单的例子。

limit a,b;

我们可以阅读以上内容

  

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

干杯!

答案 1 :(得分:0)

我不确定这是否有帮助。但是,这似乎来自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

这是提交结果: enter image description here

希望这会有所帮助!

答案 2 :(得分:0)

我的回答感谢@George Hayward

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
    set N = N-1;

  RETURN (
      # Write your MySQL query statement below.
    IFNULL(
      (SELECT DISTINCT Salary
       FROM Employee
       ORDER BY Salary DESC
        LIMIT N,1),
    NULL)
  );
END