LeetCode MySQL 615. 平均工资:部门与公司比较(over窗口函数)
文章目錄
- 1. 題目
- 2. 解題
1. 題目
給如下兩個表,寫一個查詢語句,求出在每一個工資發放日,每個部門的平均工資與公司的平均工資的比較結果 (高 / 低 / 相同)。
表: salary
| id | employee_id | amount | pay_date | |----|-------------|--------|------------| | 1 | 1 | 9000 | 2017-03-31 | | 2 | 2 | 6000 | 2017-03-31 | | 3 | 3 | 10000 | 2017-03-31 | | 4 | 1 | 7000 | 2017-02-28 | | 5 | 2 | 6000 | 2017-02-28 | | 6 | 3 | 8000 | 2017-02-28 |employee_id 字段是表 employee 中 employee_id 字段的外鍵。
| employee_id | department_id | |-------------|---------------| | 1 | 1 | | 2 | 2 | | 3 | 2 |對于如上樣例數據,結果為:
| pay_month | department_id | comparison | |-----------|---------------|-------------| | 2017-03 | 1 | higher | | 2017-03 | 2 | lower | | 2017-02 | 1 | same | | 2017-02 | 2 | same |解釋
在三月,公司的平均工資是 (9000+6000+10000)/3 = 8333.33…
由于部門 ‘1’ 里只有一個 employee_id 為 ‘1’ 的員工,
所以部門 ‘1’ 的平均工資就是此人的工資 9000 。
因為 9000 > 8333.33 ,所以比較結果是 ‘higher’。
第二個部門的平均工資為 employee_id 為 ‘2’ 和 ‘3’ 兩個人的平均工資,為 (6000+10000)/2=8000 。
因為 8000 < 8333.33 ,所以比較結果是 ‘lower’ 。
在二月用同樣的公式求平均工資并比較,比較結果為 ‘same’ ,
因為部門 ‘1’ 和部門 ‘2’ 的平均工資與公司的平均工資相同,都是 7000 。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/average-salary-departments-vs-company
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
# Write your MySQL query statement belowselect distinct pay_month, department_id, case when dep_avg > total_avg then 'higher'when dep_avg = total_avg then 'same'else 'lower' end as comparison from ( # 平均部門工資, 公司平均工資select department_id, avg(amount) over(partition by department_id, date_format(pay_date, "%Y-%m")) dep_avg,date_format(pay_date, "%Y-%m") pay_month,avg(amount) over(partition by date_format(pay_date, "%Y-%m")) total_avgfrom salary s left join employeeusing(employee_id) ) t我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode MySQL 615. 平均工资:部门与公司比较(over窗口函数)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 930. 和相同的二元
- 下一篇: LeetCode 1153. 字符串转化