圖解面試題:如何分析員工獎金?
阿新 • • 發佈:2020-08-19
【題目】
僱員表中是員工的基本資訊
僱員獎金錶是給員工發放獎金的記錄,其中獎金有3種類型:
獎金型別的值是1,表示獎金金額為薪水salary的10%,
獎金型別的值是2,表示獎金金額為薪水salary的20%,
獎金型別的值是3,表示獎金金額為薪水salary的30%
薪水錶是員工的薪水
問題:查詢僱員編號、名、姓、獎金型別、對應的當前薪水以及獎金金額。
【解題思路】
我們首先觀察輸出格式要求:
僱員編號三個表都有,名和姓來自僱員表,獎金型別來自僱員獎金錶,薪水來自薪水錶,獎金金額與獎金型別和薪水相關。
1.多表聯結
由上述條件我們可以看出需要用到多表聯結,將三個表通過僱員編號聯結起來。
我們先將僱員表和僱員獎金錶聯結,聯結結果作為臨時表。
然後再將該臨時表與薪水錶進行聯結,同樣保留兩個表的公共資料,用內聯結。
select *
from 僱員表 e inner join 僱員獎金錶 b
on e.僱員編號 = b.僱員編號
inner join 薪水錶 s
on b.僱員編號 = s.僱員編號;
2.選出分析需要的列
選出輸出格式需要的列,在select子句中指定列名。
select s.僱員編號,e.名,e.姓,b.獎金型別,s.薪水
from 僱員表 e inner join 僱員獎金錶 b
on e.僱員編號 = b.僱員編號
inner join 薪水錶 s
onb.僱員編號=s.僱員編號;
3.查詢當前薪水
查詢當前薪水,也就是滿足結束日期='9999-01-01'的行,在where子句中加上條件。
select s.僱員編號,e.名,e.姓,b.獎金型別,s.薪水
from 僱員表 e inner join 僱員獎金錶 b
on e.僱員編號 = b.僱員編號
inner join 薪水錶 s
onb.僱員編號=s.僱員編號
where s.結束日期 = '9999-01-01';
4.獎金金額
獎金金額分成三種情況:
獎金型別的值是1,表示獎金金額為薪水salary的10%,
獎金型別的值是2,表示獎金金額為薪水salary的20%,
獎金型別的值是3,表示獎金金額為薪水salary的30%
多條件的問題,要想到《猴子 從零學會SQL》裡講過的用case表示式實現。
select s.僱員編號,e.名,e.姓,b.獎金型別,s.薪水,
(case b.獎金型別
when 1 then s.薪水*0.1
when 2 then s.薪水*0.2
else s.薪水*0.3
end) as 獎金金額
from 僱員表 e inner join 僱員獎金錶 b
on e.僱員編號 = b.僱員編號
inner join 薪水錶 s
on b.僱員編號 = s.僱員編號
where s.結束日期 = '9999-01-01';
【本題考點】
1.涉及到多個表的情況,要想到用多表聯結。
2.多條件的業務問題,要想到用case表示式。
推薦:如何從零學會sql?