LeetCode176: 第二高的薪水

1、题目描述

SQL架构mysql

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

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

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

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

2、解题思路

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

3、个人代码

# 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;
*/

4、相关知识

SQL SELECT DISTINCT 语句

在表中,一个列可能会包含多个重复值,有时您也许但愿仅仅列出不一样(distinct)的值。DISTINCT 关键词用于返回惟一不一样的值。架构

语法:函数

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

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

ORDER BY 关键字默认按照升序对记录进行排序。若是须要按照降序对记录进行排序,您可使用 DESC 关键字。code

语法:blog

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;

在这个语法中,it

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)

相关文章
相关标签/搜索