码迷,mamicode.com
首页 > 其他好文 > 详细

579. 查询员工的累计薪水

时间:2020-04-26 16:51:32      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:sele   esc   查询   code   leetcode   sql 语句   显示   span   employee   

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 |
 

解释:

员工 ‘1‘ 除去最近一个月(月份 ‘4‘),有三个月的薪水记录:月份 ‘3‘ 薪水为 40,月份 ‘2‘ 薪水为 30,月份 ‘1‘ 薪水为 20。

所以近 3 个月的薪水累计分别为 (40 + 30 + 20) = 90,(30 + 20) = 50 和 20。

| Id | Month | Salary |
|----|-------|--------|
| 1 | 3 | 90 |
| 1 | 2 | 50 |
| 1 | 1 | 20 |
员工 ‘2‘ 除去最近的一个月(月份 ‘2‘)的话,只有月份 ‘1‘ 这一个月的薪水记录。

| Id | Month | Salary |
|----|-------|--------|
| 2 | 1 | 20 |
员工 ‘3‘ 除去最近一个月(月份 ‘4‘)后有两个月,分别为:月份 ‘4‘ 薪水为 60 和 月份 ‘2‘ 薪水为 40。所以各月的累计情况如下:

| Id | Month | Salary |
|----|-------|--------|
| 3 | 3 | 100 |
| 3 | 2 | 40 |

来源:力扣(LeetCode)

 

select a.id , a.month , a.sum_salary as salary
from 
 (
select id , month , salary , if(@id is null or @id = id , @r:=@r+1, @r := 1) as rank,if(@id is null or @id = id , @s:=@s+salary, @s := salary) as sum_salary, @id :=id 
from employee, (select @id:=null, @r:=0 , @s :=0) i
order by id , month
) a 
join (select id , count(month) as cnt from employee group by id) b on a.id = b.id
where a.rank < b.cnt and a.rank >= b.cnt -3
order by a.id , a.month desc

 

579. 查询员工的累计薪水

标签:sele   esc   查询   code   leetcode   sql 语句   显示   span   employee   

原文地址:https://www.cnblogs.com/longlongaway/p/12780538.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!