zoukankan      html  css  js  c++  java
  • LeetCode176: 第二高的薪水

    一、题目描述

    SQL架构

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

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

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

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

    二、解题思路

    1. 需要排除重复的值
    2. 再排个序
    3. 选出第二个
    4. 注意只有一个数据的情况

    三、我的代码

    # Write your MySQL query statement below
    SELECT
        (SELECT DISTINCT
            Salary
        FROM
            Employee
        ORDER BY 
            Salary 
        DESC
        LIMIT 1 OFFSET 1)
    AS 
    SecondHighestSalary
    ;
    
    /*法二
    SELECT
        IFNULL(
          (SELECT DISTINCT Salary
           FROM Employee
           ORDER BY Salary DESC
            LIMIT 1 OFFSET 1),
        NULL) 
    AS SecondHighestSalary;
    */
    

    四、相关知识

    SQL SELECT DISTINCT 语句

    在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。DISTINCT 关键词用于返回唯一不同的值。

    语法:

    SELECT DISTINCT 
    	column_name
    FROM table_name;
    
    SQL ORDER BY 关键字

    ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。

    ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。

    语法:

    SELECT 
    column_name1,column_name2
    FROM table_name
    ORDER BY 
    column_name1,column_name2 
    ASC|DESC;
    
    SQL LIMIT子句

    要检索查询返回的行的一部分,请使用LIMITOFFSET子句。 以下说明了这些子句的语法:

    SELECT 
        column_list
    FROM
        table1
    ORDER BY 
    	column_list
    LIMIT row_count OFFSET offsetColumnNumber;
    

    在这个语法中,

    row_count确定将返回的行数。

    OFFSET子句在开始返回行之前跳过偏移行。 OFFSET子句是可选的。 如果同时使用LIMITOFFSET子句,OFFSET会在LIMIT约束行数之前先跳过偏移行。

    SQL SELECT ……AS……语句

    as 可理解为:用作、当成,作为;一般是重命名列名或者表名。

    1.例如有表table, 列 column_1,column_2

    你可以写成

    select  column_1  as  列1, column_2 as  列2   from  table  as  表
    

    上面的语句就可以解释为,选择 column_1 作为列1,column_2 作为列2 , 把 table 当成表

    SELECT * FROM Employee AS emp
    

    这句意思是查找所有Employee 表里面的数据,并把Employee表格命名为 emp。
    当你命名一个表之后,你可以在下面用 emp 代替 Employee.
    例如 SELECT * FROM emp.

    3.把查询对像起个别名的作用。

    select ID as 用户ID,Name as 用户名 from Table_user
    
    MySQL IFNULL() 函数

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

    IFNULL() 函数语法格式为:

    IFNULL(expression, alt_value)
    

    如果第一个参数的表达式 expression 为 NULL,则返回第二个参数的备用值。

    参数说明:

    参数 描述
    expression 必须,要测试的值
    alt_value 必须,expression 表达式为 NULL 时返回的值
    SELECT DISTINCT
        Salary AS SecondHighestSalary
    FROM
        Employee
    ORDER BY Salary DESC
    LIMIT 1 OFFSET 1
    ;//若Salary只有一个值,则为NULL,SecondHighestSalary的值不存在,也不为空
    

    为空时,正确结果应为:(null)

  • 相关阅读:
    阿里云 Linux Centos7下安装Tomcat8
    Centos7.5中安装JDK1.8环境变量配置
    JAVA中的抽象类和接口
    Struts2框架
    [机器学习]--逻辑回归总结
    matlab-使用技巧
    机器学习-一对多(多分类)代码实现(matlab)
    机器学习-反向传播算法(BP)代码实现(matlab)
    线性回归代码实现(matlab)
    217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/gqw-myblogs/p/14238608.html
Copyright © 2011-2022 走看看