力扣579(MySQL)-查询员工的累积薪水(困难)
题目:
Employee 表保存了一年内的薪水信息。
请你编写 SQL 语句,对于每个员工,查询他除最近一个月(即最大月)之外,剩下每个月的近三个月的累计薪水(不足三个月也要计算)。
结果请按 Id 升序,然后按 Month 降序显示。

输出:

解题思路:
三个月内:假如当前月是4月,那么三个月的累积就是 4月工资 + 3月工资 + 2月工资。

以上怎么算出来的?
id 为1 的员工工资分布月为1,2,3,4月,题目要求排除最大月,那就是1,2,3月,sum(第三行) = 第三行+第二行 +第一行 = 40+30+20 = 90,sum(第二行)=第二行+第一行 = 30+20 = 50,sum(第一行) = 20。
①先将表按id分组,再按Month进行降序排序,并增加一列序数值;
1 SELECT
2 Id,
3 Month,
4 Salary,
5 DENSE_RANK() over ( PARTITION BY Id ORDER BY Month DESC )
6 AS rnk
7 FROM employee_579

②筛选掉序数最高的,然后对工资进行求和,最终按id升序,当id一样的时候按Month降序排序。
1 SELECT
2 temp.Id,
3 temp.Month,
4 sum( temp.Salary ) over ( PARTITION BY temp.Id ORDER BY temp.Month ) AS salary
5 FROM
6 ( SELECT Id, Month, Salary, DENSE_RANK() over ( PARTITION BY Id ORDER BY Month DESC ) AS rnk FROM employee_579 ) AS temp
7 WHERE
8 temp.rnk > 1
9 ORDER BY
10 temp.Id,
11 temp.Month DESC;

力扣579(MySQL)-查询员工的累积薪水(困难)的更多相关文章
- MYSQL查询第二高的薪水
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) . +----+--------+| Id | Salary |+----+--------+| 1 | 100 || ...
- mysql查询之部门工资最高的员工
最近发现一个网站 力扣 查看 上面有很多算法和数据库的题目,做了一下,发现自己平时都疏忽了,因此边做边记录下来 Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 de ...
- 力扣---1148. 文章浏览 I
Views 表:+---------------+---------+| Column Name | Type |+---------------+---------+| article_i ...
- 力扣---511. 游戏玩法分析 I
活动表 Activity: +--------------+---------+| Column Name | Type |+--------------+---------+| player ...
- MYSQL查询语句大全集锦
MYSQL查询语句大全集锦 1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2.创建一个数据库MYSQLDATA mysql> C ...
- mysql查询操作之单表查询、多表查询、子查询
一.单表查询 单表查询的完整语法: .完整语法(语法级别关键字的排列顺序如下) select distinct 字段1,字段2,字段3,... from 库名.表名 where 约束条件 group ...
- mysql查询之上升的温度,有趣的电影,超过5名学生的课,大国,反转性别, 换座位
最近发现一个网站 力扣 查看 上面有很多算法和数据库的题目,做了一下,发现自己平时都疏忽了,因此边做边记录下来 1.上升的温度 给定一个 Weather 表,编写一个 SQL 查询,来查找与之前(昨天 ...
- MySQL 查询语句--------------进阶6:连接查询
#进阶6:连接查询 /* 含义:多个表格连接,当查询的字段来自于多个表时候,就会用到连接查询 我觉得这里类似于excel中的vlookup函数 笛卡尔乘积现象:表1有m行,表2有n行,结果有m*n行 ...
- SEC5 - MySQL 查询语句--------------进阶1:基础查询
# 进阶1:基础查询 /* 语法: select 查询列表 from 表名: 特点: 1.查询列表可以是:表中的字段.常量值.表达式.表达式.函数 2.查询的结果是一个虚拟的表格 如何执行:执行谁,请 ...
- MYSQL查询查找重复的电子邮箱
编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱. 示例: +----+---------+| Id | Email |+----+---------+| 1 | a@b.com | ...
随机推荐
- python中记录打印的log模块logging的用法实例
日志基础教程 日志是对软件执行时所发生事件的一种追踪方式.软件开发人员对他们的代码添加日志调用,借此来指示某事件的发生.一个事件通过一些包含变量数据的描述信息来描述(比如:每个事件发生时的数据都是 ...
- electron程序运行在某些 windows 上白屏
现象: 打包后的 electron 程序 运行在某些 windows 上白屏 项目情况: vue3.0 项目使用 vue-cli 创建 使用 vue add electron-builder 添加打 ...
- .Net依赖注入神器Scrutor(上)
前言 从.Net Core 开始,.Net 平台内置了一个轻量,易用的 IOC 的框架,供我们在应用程序中使用,社区内还有很多强大的第三方的依赖注入框架如: Autofac DryIOC Grace ...
- 开发必会系列:《深入理解JVM(第二版)》读书笔记
一 开始前 HotSpot:http://xiaomogui.iteye.com/blog/857821 http://blog.csdn.net/u011521890/article/detail ...
- top 命令解释
PID:进程ID USER:运行改进程的用户 PR:进程的优先级 NI:Nice值,进程的优先级修正值,负值表示高优先级,正值表示低优先级 VIRT:虚拟内存,进程使用的虚拟内存总量 RES:物理内存 ...
- 【Java基础知识】东软面试(一面)
01 面向对象的特征 封装:隐藏部分对象的属性和实现细节,以不同的访问级别来保护对象内部的数据,防止外部程序的不当访问,对外提供公开的接口.[私有的属性,共有的方法] 继承:子类自动共享父类数据和方法 ...
- 【已解决】aconda3 创建和切换jupyter Kernel(安装好了tensorflow在jupyter中无法使用)
如下图:在这里更换python环境内核(如果你把tensorflow安装在了一个新建的虚拟环境) 1. 创建新的环境(或者是直接激活进入已经安装了tensorflow的环境) conda create ...
- 企业数据清洗项目实践day3
封装昨天的生成json方法,生成标准字段方法以及生成最终文件的方法. 1 import pandas as pd 2 import xlwt 3 """ 4 rank的一 ...
- Java 实现OCR扫描/识别图片文字
图片内容一般无法编辑,如果想要读取图片中的文本,我们需要用到OCR工具.本文将介绍如何在Java中实现OCR识别读取图片中的文字. 所需工具: IDEA Spire.OCR for Java - Ja ...
- Postman模拟浏览器网页请求并获取网页数据
本文介绍在浏览器中,获取网页中的某一个请求信息,并将其导入到Postman软件,并进行API请求测试的方法. Postman是一款流行的API开发和测试工具,它提供了一个用户友好的界面,用于创 ...