首页 > 数据库 >leecode 数据库: 579. 查询员工的累计薪水

leecode 数据库: 579. 查询员工的累计薪水

时间:2024-10-15 09:18:44浏览次数:10  
标签:579 20 薪水 +----+-------+--------+ 40 month leecode 员工 id

表:

Employee

+-------------+------+
| Column Name | Type |
+-------------+------+
| id          | int  |
| month       | int  |
| salary      | int  |
+-------------+------+
(id, month) 是该表的主键(具有唯一值的列的组合)。
表中的每一行表示 2020 年期间员工一个月的工资。

 题目要求:

编写一个解决方案,在一个统一的表中计算出每个员工的 累计工资汇总 。

员工的 累计工资汇总 可以计算如下:

  • 对于该员工工作的每个月,将 该月 和 前两个月 的工资  起来。这是他们当月的 3 个月总工资 。如果员工在前几个月没有为公司工作,那么他们在前几个月的有效工资为 0 。
  • 不要 在摘要中包括员工 最近一个月 的 3 个月总工资和。
  • 不要 包括雇员 没有工作 的任何一个月的 3 个月总工资和。

返回按 id 升序排序 的结果表。如果 id 相等,请按 month 降序排序

结果格式如下所示。

示例 1

输入:
Employee table:
+----+-------+--------+
| 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     |
| 1  | 7     | 90     |
| 1  | 8     | 90     |
+----+-------+--------+
输出:
+----+-------+--------+
| id | month | Salary |
+----+-------+--------+
| 1  | 7     | 90     |
| 1  | 4     | 130    |
| 1  | 3     | 90     |
| 1  | 2     | 50     |
| 1  | 1     | 20     |
| 2  | 1     | 20     |
| 3  | 3     | 100    |
| 3  | 2     | 40     |
+----+-------+--------+
解释:
员工 “1” 有 5 条工资记录,不包括最近一个月的 “8”:
- 第 '7' 个月为 90。
- 第 '4' 个月为 60。
- 第 '3' 个月是 40。
- 第 '2' 个月为 30。
- 第 '1' 个月为 20。
因此,该员工的累计工资汇总为:
+----+-------+--------+
| id | month | salary |
+----+-------+--------+
| 1  | 7     | 90     |  (90 + 0 + 0)
| 1  | 4     | 130    |  (60 + 40 + 30)
| 1  | 3     | 90     |  (40 + 30 + 20)
| 1  | 2     | 50     |  (30 + 20 + 0)
| 1  | 1     | 20     |  (20 + 0 + 0)
+----+-------+--------+
请注意,'7' 月的 3 个月的总和是 90,因为他们没有在 '6' 月或 '5' 月工作。

员工 '2' 只有一个工资记录('1' 月),不包括最近的 '2' 月。
+----+-------+--------+
| id | month | salary |
+----+-------+--------+
| 2  | 1     | 20     |  (20 + 0 + 0)
+----+-------+--------+

员工 '3' 有两个工资记录,不包括最近一个月的 '4' 月:
- 第 '3' 个月为 60 。
- 第 '2' 个月是 40。
因此,该员工的累计工资汇总为:
+----+-------+--------+
| id | month | salary |
+----+-------+--------+
| 3  | 3     | 100    |  (60 + 40 + 0)
| 3  | 2     | 40     |  (40 + 0 + 0)
+----+-------+--------+

 综上,题目的要求是求员工当月工资和上两个月工资 并且忽略上没有上两个月工资的数据以及该员工最近工作月的数据。

代码如下:

with tmp as(
select
    *,
    rank() over(partition by id order by month desc) as rn
from Employee
)
select id,month,
    sum(salary) over(partition by id order by month range between 2 preceding and current row) as salary
 from tmp
 where rn != 1
 order by id ,month desc;

 一     在表内增加一列数据 rn 作为对数据删选的基础 当 rn =1时则表示该月是该员工最近工作的月份,需要删除。

select
    *,
    rank() over(partition by id order by month desc) as rn
from Employee

二     将该表作为查询表,按照输出要求填写代码。这里要求近三个月而且月份并不一定连续。需要使用 range between 按照 order by 字段后的数据来进行删选。因为 month 的字段为 Int ,所以直接填 2 即可,最后按照要求排序即可。

以上就是全部答案,如果对你有帮助请点个赞,谢谢。

来源:力扣(leecode

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 转载请注明出处:

leecode 数据库: 579. 查询员工的累计薪水-CSDN博客Employee(id, month) 是该表的主键(具有唯一值的列的组合)。表中的每一行表示 2020 年期间员工一个月的工资。https://blog.csdn.net/CYJ1844/article/details/142913143

标签:579,20,薪水,+----+-------+--------+,40,month,leecode,员工,id
From: https://blog.csdn.net/CYJ1844/article/details/142913143

相关文章

  • leecode 数据库: 1164. 指定日期的产品价格
    表:Products+---------------+---------+|ColumnName|Type|+---------------+---------+|product_id|int||new_price|int||change_date|date|+---------------+---------+(product_id,change_date)是此表的主键(具有唯一......
  • leecode 数据库: 534. 游戏玩法分析 III
    表:Activity+--------------+---------+|ColumnName|Type|+--------------+---------+|player_id|int||device_id|int||event_date|date||games_played|int|+--------------+---------+(player_id,event_date)是此表的......
  • Leecode27移除元素
    题目Leecode27.移除元素给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素。元素的顺序可能发生改变。然后返回nums中与val不同的元素的数量。假设nums中不等于val的元素数量为k,要通过此题,您需要执行以下操作:更改nums数组,使nums......
  • 【Leecode 随笔】C语言版看了不后悔系列持续更新中。。。
    文章目录题目一:两数相除题目描述示例1:示例2:注意:解题思路示例代码深入剖析题目二:加一题目描述示例1:示例2:解题思路示例代码深入剖析题目三:快乐数题目描述示例1:示例2:解题思路示例代码深入剖析......
  • Leecode热题100-3.无重复字符最长子串
    给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。示例 1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为3。示例2:输入:s="bbbbb"输出:1解释:因为无重复字符的最长子串是"b",所以其长度为1。......
  • Leecode热题100-75.颜色分类
    给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库内置的sort函数的情况下解决这个问题。示例1:输入:num......
  • Leetcode 1907 按分类统计薪水
    一、题目查询每个工资类别的银行账户数量。 工资类别如下:"LowSalary":所有工资 严格低于 20000 美元。"AverageSalary": 包含 范围内的所有工资 [$20000, $50000] 。"HighSalary":所有工资 严格大于 50000 美元。结果表 必须 包含所有三个类别。 如果某个类......
  • 【Leecode 随笔】C语言版看了不后悔系列持续更新中。。。(四)
    文章目录题目一:实现一个函数,计算两个整数的最大公约数(GCD)题目分析:解题思路:示例代码:代码解析:题目二:实现一个函数,判断一个整数是否为素数题目分析:解题思路:示例代码:代码解析:题目三:实现一个函数,对给定的字符串进行排序(按字母顺序)题目分析:解题思路:示例代码:代码解析:......
  • leecode203-移除链表元素
    文章目录题目解题方法1题目给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val==val的节点,并返回新的头节点。示例1:输入:head=[1,2,6,3,4,5,6],val=6输出:[1,2,3,4,5]示例2:输入:head=[],val=1输出:[]示例3:输入:head......
  • leecode 59-螺旋矩阵Ⅱ
    leecode59-螺旋矩阵Ⅱ题目解题方法1循环题目给你一个正整数n,生成一个包含1到n^2所有元素,且元素按顺时针顺序螺旋排列的nxn正方形矩阵matrix。示例1输入:n=3输出:[[1,2,3],[8,9,4],[7,6,5]]示例2:输入:n=1输出:[[1]]解题方法1循环题目的要......