2020-10-13 第N高数据

第N高数据
常见的问题有比如第二贵的物品,或者是取排名在第3~第8的品牌、成绩等等。。
【相关知识】
ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,可以使用 DESC 关键字。

SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;

limit子句用于限制查询结果返回的数量,常用于分页查询

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

IFNULL(expr1,expr2) 用法:
假如expr1不为NULL,则 IFNULL() 的返回值为expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。

  mysql>   SELECT   IFNULL(1,0);   
                            ->   1   
  mysql>   SELECT   IFNULL(NULL,10);   
                            ->   10   
  mysql>   SELECT   IFNULL(1/0,10);   
                            ->   10   
  mysql>   SELECT   IFNULL(1/0,'yes');   
                            ->   'yes'  
  IFNULL(expr1,expr2)的默认结果值为两个表达式中更加“通用”的一个,顺序为STRING、REAL或 INTEGER。

ISNULL(expr) 用法:
如expr 为null,那么isnull() 的返回值为 1,否则返回值为 0。

    mysql> select isnull(1+1);
                       -> 0
    mysql> select isnull(1/0);
                     -> 1
    使用=null 值对比通常是错误的。

NULLIF(expr1,expr2) 用法:
如果expr1 = expr2 成立,那么返回值为NULL,否则返回值为expr1。这和CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END相同。

mysql> SELECT NULLIF(1,1); 
-> NULL 
mysql> SELECT NULLIF(1,2); 
-> 1 

如果参数不相等,则 MySQL 两次求得的值为 expr1。
力扣题目:
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。

+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+

例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。


+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+
select IFNULL((select Distinct  Salary  from Employee order by Salary DESC  limit 1,1),null) as SecondHighestSalary

那么第N高的薪水mysql语句如下:

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) as Salary
  
  );
END
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值