1. 程式人生 > 實用技巧 >圖解面試題:如何分析員工獎金?

圖解面試題:如何分析員工獎金?

【題目】

僱員表中是員工的基本資訊

僱員獎金錶是給員工發放獎金的記錄,其中獎金有3種類型:

獎金型別的值是1,表示獎金金額為薪水salary的10%,

獎金型別的值是2,表示獎金金額為薪水salary的20%,

獎金型別的值是3,表示獎金金額為薪水salary的30%

薪水錶是員工的薪水

問題:查詢僱員編號、名、姓、獎金型別、對應的當前薪水以及獎金金額。

【解題思路】

我們首先觀察輸出格式要求:

僱員編號三個表都有,名和姓來自僱員表,獎金型別來自僱員獎金錶,薪水來自薪水錶,獎金金額與獎金型別和薪水相關。

1.多表聯結

由上述條件我們可以看出需要用到多表聯結,將三個表通過僱員編號聯結起來。

我們先將僱員表和僱員獎金錶聯結,聯結結果作為臨時表。

然後再將該臨時表與薪水錶進行聯結,同樣保留兩個表的公共資料,用內聯結。

select *from 僱員表 e inner join 僱員獎金錶 bon e.僱員編號 = b.僱員編號inner join 薪水錶 son b.僱員編號 = s.僱員編號;

2.選出分析需要的列

選出輸出格式需要的列,在select子句中指定列名。

select s.僱員編號,e.名,e.姓,b.獎金型別,s.薪水from 僱員表 e inner join 僱員獎金錶 bon e.僱員編號 = b.僱員編號inner join 薪水錶 s
onb.僱員編號=s.僱員編號;

3.查詢當前薪水

查詢當前薪水,也就是滿足結束日期='9999-01-01'的行,在where子句中加上條件。

select s.僱員編號,e.名,e.姓,b.獎金型別,s.薪水from 僱員表 e inner join 僱員獎金錶 bon e.僱員編號 = b.僱員編號inner join 薪水錶 sonb.僱員編號=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.1when 2 then s.薪水*0.2else s.薪水*0.3 end) as 獎金金額from 僱員表 e inner join 僱員獎金錶 bon e.僱員編號 = b.僱員編號inner join 薪水錶 son b.僱員編號 = s.僱員編號 where s.結束日期 = '9999-01-01';

【本題考點】

1.涉及到多個表的情況,要想到用多表聯結。

2.多條件的業務問題,要想到用case表示式。

推薦:如何從零學會sql?