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資料庫之IFNULL函數和NULLIF函數
學習IFNULL()函數 非空判斷[解析]
如果expression1為null, 在函數傳回expression2,否則将傳回expression1。
而expression1可以為sql語句,expression2同樣可以為sql語句,不是隻能傳回null
舉例說明
擴充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。