天天看點

SQL資料庫練習②之第二高薪水SQL資料庫練習②之第二高薪水

SQL資料庫練習②之第二高薪水

一.擁有的表

±—±-------+

| Id | Salary |

±—±-------+

| 1 | 100 |

| 2 | 200 |

| 3 | 300 |

±—±-------+

例如上述 Employee 表,SQL查詢應該傳回 200 作為第二高的薪水。如果不存在第二高的薪水,那麼查詢應傳回 null。

二.需求:第二高薪水

編寫一個 SQL 查詢,擷取 Employee 表中第二高的薪水(Salary) 。

±--------------------+

| SecondHighestSalary |

±--------------------+

| 200 |

±--------------------+

三.解決方案[王子威]

分析

– 解析SQL:查詢非空判斷(查詢沒有值,傳回null)别名 SecondHighestSalary

– 解析内置查詢: select查詢 distinct是忽略Salary 字段中包含重複資料的記錄 form 表為 Employee order by排序 salary字段 desc升序 limit分頁 開始1,結束1 也就是說隻要第二條資料

SQL語句

select IFNULL((select distinct Salary from Employee order by salary desc limit 1,1),null)as SecondHighestSalary
           

四.技術點解析

distinct字段解析

它的作用是:選擇唯一的結果集,即去除重複記錄。

舉例說明

SQL資料庫練習②之第二高薪水SQL資料庫練習②之第二高薪水

SQL資料庫之IFNULL函數和NULLIF函數

學習IFNULL()函數 非空判斷[解析]

如果expression1為null, 在函數傳回expression2,否則将傳回expression1。

而expression1可以為sql語句,expression2同樣可以為sql語句,不是隻能傳回null

舉例說明
SQL資料庫練習②之第二高薪水SQL資料庫練習②之第二高薪水

擴充NULLIF ()函數 比較是否相等[解析]

如果兩個參數等價,則傳回NULL ;否則,傳回第一個參數。

舉例說明

例如

mysql> select NULLIF(1,2);

±------------+

| NULLIF(1,2) |

±------------+

| 1 |

±------------+

1 row in set (0.00 sec)

兩個參數不相等,是以結果是第一個參數1。

再例如,

mysql> select NULLIF(1,1);

±------------+

| NULLIF(1,1) |

±------------+

| NULL |

±------------+

1 row in set (0.00 sec)

兩個參數相等,是以結果是NULL。

SQL資料庫練習②之第二高薪水SQL資料庫練習②之第二高薪水