【LeetCode-SQL】579. 查询员工的累计薪水

该博客探讨如何使用SQL查询每个员工除去最近一个月外的近三个月累计薪水。通过`sum() over()`函数和`join`操作进行了解题,并提供了示例数据和解决方案的代码。文章还提到了滑动窗口函数的应用。
摘要由CSDN通过智能技术生成

一、题目

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. **选择日期字段**:确保你有一个日期字段(如`date`或`report_date`),它可以标识记录的发生时间。 2. **按年份和月份分组**:使用GROUP BY语句按年度(YYYY)和月份(MM)对数据进行分组。 ```sql SELECT YEAR(date) AS 年份, MONTH(date) AS 月份, SUM(值字段) AS 当月总值 FROM 数据 GROUP BY 年份, 月份; ``` 3. **当年累计值**:要在同一年内计算每个月份的累计值,可以在上述查询的基础上再加一个窗口函数,比如`SUM() OVER (PARTITION BY 年份 ORDER BY 月份)`。 ```sql SELECT 年份, 月份, SUM(值字段) AS 当月总值, SUM(value_field) OVER (PARTITION BY 年份 ORDER BY 月份) AS 当年累计值 FROM 数据 GROUP BY 年份, 月份; ``` 4. **累计值**:如果你想要的是整个时间段的累计值,比如从年初至今的累计,可以添加一个额外的累积条件,比如`RANK() OVER (PARTITION BY 年份 ORDER BY date)`,然后筛选出累计值为1的数据。 ```sql SELECT 年份, 月份, SUM(值字段) AS 总累计值, SUM(value_field) OVER (PARTITION BY 年份 ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS 累计值 FROM 数据 WHERE RANK() = 1 GROUP BY 年份, 月份; ``` 这里假设`RANK()`返回每个年份内的第一个月份的行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值