LeetCode176. 第二高及第n高的薪水

LeetCode176. 第二高及第n高的薪水

编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。

LeetCode176. 第二高及第n高的薪水_第1张图片

解法一:利用 limit 进行限制 此方法可适用于求第N高的薪水

imit 的用法为: select * from tableName limit i,n
tableName:表名
i:为查询结果的索引值(默认从0开始),当i=0时可省略i
n:为查询结果返回的数量
i与n之间使用英文逗号","隔开

select
(select distinct Salary 
from Employee 
order by Salary 
desc limit 1,1) 
as SecondHighestSalary

心得:
1.注意去掉重复薪资
3.使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按ASC升序排列。
2.注意limit的用法,索引从0 开始,降序排列后第二高索引为1

解法二:使用IFNULL() 函数

IFNULL() 函数语法格式为:IFNULL(expression, alt_value)
IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。

select ifnull
(
	(select distinct Salary 
	from Employee 
	order by Salary 
	desc limit 1,1),null) 
as SecondHighestSalary

心得:
1.注意ifnull是在select查询中使用
2.若为null,返回第二参数,非null返回第一参数

LeetCode176. 第二高及第n高的薪水_第2张图片

sql自定义函数

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
    SET N= N-1;
    RETURN (
      # Write your MySQL query statement below.
      select ifnull(
          (select distinct Salary 
          from Employee order by Salary desc 
          limit N,1),
          null)
  );
END

心得:
1.要注意N的设置不可以在return里面
2.变量声明:DECLARE
3.CREATE FUNCTION Foo(N INT ) --传入了一个int类型的参数N
RETURNS INT --注意这里返回的是一个数据类型
BEGIN
DECLARE M INT
SET N = 3
RETURN (一条SQL语句)
END

你可能感兴趣的:(LeetCode,数据库,sql)