LeetCode176. 第二高及第n高的薪水
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。
解法一:利用 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返回第一参数
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