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)

相關文章
相關標籤/搜索