zoukankan      html  css  js  c++  java
  • sql练习

    Create table If Not Exists Employee (Id int, Salary int)
    Truncate table Employee
    insert into Employee (Id, Salary) values ('1', '100')
    insert into Employee (Id, Salary) values ('2', '200')
    insert into Employee (Id, Salary) values ('3', '300')

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

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

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

    +---------------------+
    | SecondHighestSalary |
    +---------------------+
    | 200                 |
    +---------------------+
     
    select (select distinct salary from Employee order by salary desc limit 1,1) as SecondHighestSalary 

    第二高的薪水

    难度简单

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

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

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

    +---------------------+
    | SecondHighestSalary |
    +---------------------+
    | 200                 |
    +---------------------+

    第二高的薪水:

    • 要想获取第二高,需要排序,使用 order by(默认是升序 asc,即从小到大),若想降序则使用关键字 **desc**

    • 去重,如果有多个相同的数据,使用关键字 **distinct** 去重

    • 判断临界输出,如果不存在第二高的薪水,查询应返回 null,使用 **ifNull**(查询,null)方法

    • 起别名,使用关键字 **as** ...

    • 因为去了重,又按顺序排序,使用 limit()方法,查询第二大的数据,即第二高的薪水,即 limit(1,1) (因为默认从0开始,所以第一个1是查询第二大的数,第二个1是表示往后显示多少条数据,这里只需要一条)

    第 N 高的薪水:

    • 题目是 176.第二高的薪水 的变形,将查询第二名变成查询 第N名
    • 别名中不能带参数,一开始看到测试用例表,使用的别名是getNthHighestSalary(2),就用了getNthHighestSalary(N)做别名,一开始报错还不知道是哪,后面删去变量即可
    • limit()方法中不能参与运算,因为索引从0开始,所以要 - 1,最好在外面就设定好 set N = N - 1
    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 getNthHighestSalary
      );
    END
     
     
     
     
     
  • 相关阅读:
    php-ip
    第十三讲 服务寄宿
    第十二讲:服务寄宿
    第十一讲:大消息处理
    第十讲:绑定(信道)
    第九讲:消息契约
    第八讲:数据契约版本控制
    第七讲:数据契约(2)
    第六讲:数据契约
    第五讲:异步操作
  • 原文地址:https://www.cnblogs.com/swiftycc/p/14657435.html
Copyright © 2011-2022 走看看