SQL I 筆記撰寫計畫
敘述
這是 SQL I
的第二天第一個題目,總共有三題。
你是某公司的 PM ,你有一張表紀錄每個員工還有他們的薪水,現在你要發獎金給他們,而且是一個很有趣的分配方式…
Table: Employees
+-------------+---------+ | Column Name | Type | +-------------+---------+ | employee_id | int | | name | varchar | | salary | int | +-------------+---------+ employee_id is the primary key for this table. Each row of this table indicates the employee ID, employee name, and salary.
獎金只有發與不發,要發就是 100% ,不發就是 0 ,只有完全符合以下兩個條件的員工才值得得到獎金:
他的名字(name
)不能是以 M 開頭。
他的編號(employee_id
)不能是偶數。
Example 1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Input: Employees table: +-------------+---------+--------+ | employee_id | name | salary | +-------------+---------+--------+ | 2 | Meir | 3000 | | 3 | Michael | 3800 | | 7 | Addilyn | 7400 | | 8 | Juan | 6100 | | 9 | Kannon | 7700 | +-------------+---------+--------+ Output: +-------------+-------+ | employee_id | bonus | +-------------+-------+ | 2 | 0 | | 3 | 0 | | 7 | 7400 | | 8 | 0 | | 9 | 7700 | +-------------+-------+ Explanation: employee_id = 2 和 8 的員工沒有獎金,因為他們的 employee_id 是偶數(太慘了)。 employee_id = 3 的員工沒有獎金,因為他名字是 M 開頭(太慘了)。 其他的人都可以享有 100% 薪水的獎金
筆記
case 方法
在查詢欄位寫 case ,滿足就代入薪水,不滿足就代入 0 。
1 2 3 4 5 6 7 8 9 10 11 select employee_id, case when (MOD (employee_id, 2 ) <> 0 ) and (name not like 'M%' ) then salary else 0 end bonus from Employees order by employee_id
math 方法
這個方法很微妙,查出來的薪水欄位乘於(薪水欄位除於二的餘數),然後再乘於(名字不包含M的人),具體 SQL 如下:
1 2 3 4 5 6 7 select employee_id, salary * MOD (employee_id, 2 ) * (name NOT LIKE 'M%' ) as bonus from Employees order by employee_id
成績
case 方法
math 方法
參考資料
Two solutions - MSSQL
MySQL | Without Case And IF | 100 % Runtime