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

w8f9ii69  于 2023-05-16  发布在  Mysql
关注(0)|答案(5)|浏览(129)
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时,m也将是负的,当N=0时,它给出以下例外

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

slhcrj9b1#

我不确定这是否有帮助。但这看起来像是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

下面是提交结果:

希望这有帮助!

h9a6wy2h

h9a6wy2h2#

我在这个问题上迟到了,但我也在这个问题上挣扎。花了几个小时调试这个。您可以始终在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之后停止。
干杯!

6jygbczu

6jygbczu3#

别忘了把工资分组。

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  set N = N - 1;
  RETURN (
      select salary from Employee group by salary order by salary desc limit 1 offset N
  );
END

因此,如果你有两个100的工资,你正在寻找第二高,答案应该是空的。

hc8w905p

hc8w905p4#

谢谢@乔治海沃德

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
9udxz4iz

9udxz4iz5#

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  SET N = N-1;
    RETURN (
        SELECT DISTINCT salary FROM Employee 
        ORDER BY salary DESC 
        LIMIT 1 OFFSET N);
END;

相关问题