查詢員工的累計薪水(困難)

2021-10-07 05:44:28 字數 1322 閱讀 7563

employee 表儲存了一年內的薪水資訊。

請你編寫 sql 語句,對於每個員工,查詢他除最近乙個月(即最大月)之外,剩下每個月的近三個月的累計薪水(不足三個月也要計算)。

結果請按 id 公升序,然後按 month 降序顯示。

| id |

month

| salary |

|----|-------|--------||1

|1|20

||2|

1|20|

|1|2

|30||

2|2|

30||3

|2|40

||1|

3|40|

|3|3

|60||

1|4|

60||3

|4|70

|

輸出:

| id |

month

| salary |

|----|-------|--------||1

|3|90

||1|

2|50|

|1|1

|20||

2|1|

20||3

|3|100||

3|2|

40|

題解:

先利用row_number() over對原表增加乙個輔助排序列,取排序列》1就能獲取除最近乙個月外的剩餘月份。

其次,再使用一次sum() over函式求和,但是注意的是,原題需要每個月的近三月和,這是乙個類似移動平均的問題,不是只求三個月。因此,我在over裡加了一句rows 2 preceding,表示該行和下兩行之和,也就是近3行之和。問題解決。

select e.id,e.

month

,sum

(e.salary)

over

(partition

by e.id order

by e.

month

rows

2preceding

) salary from

(select id,

month

,salary, row_number(

)over

(partition

by id order

bymonth

desc

) rown from employee) e

where e.rown>

1order

by id,

month

desc

Leetcode 579 查詢員工的累計薪水

題目難度 困難題目描述 employee 表儲存了一年內的薪水資訊。請你編寫 sql 語句,來查詢每個員工每個月最近三個月的累計薪水 不包括當前統計月,不足三個月也要計算 結果請按 id 公升序,然後按 month 降序顯示。正確答案 select e1.id,e1.month sum e2.sal...

查詢薪水第二多的員工基本資訊

題目描述 查詢當前薪水 to date 9999 01 01 排名第二多的員工編號emp no 薪水salary last name以及first name,不准 使用 order by create table employees emp no int 11 not null,birth date...

查詢所有員工入職時候的薪水情況 6

題目描述 查詢所有員工入職時候的薪水情況,給出emp no以及salary,並按照emp no進行逆序 create tableemployees emp noint 11 not null,birth datedate not null,first namevarchar 14 not null,...