mysql之部门工资前三的所有员工
发布日期:2021-07-27 04:53:01
浏览次数:5
分类:技术文章
本文共 1918 字,大约阅读时间需要 6 分钟。
题目叙述
要求
解法一: 注:mysql也可以用开窗函数,用法与hive略有区别select d.name department,a.name name,a.salary from department d,(SELECT name,salary ,departmentid,Dense_rank() over(partition by departmentid order by salary desc) as ranking from employee1 ) a where a.departmentid = d.id and a.ranking <= 3
此方法最为简单,看着不复杂,在此不做详细解释
解法二:自定义变量 简化问题(分步骤) 分解步骤的思路,可以依据必要存在的步骤进行分解 1.根据 部门 (升),薪水 (降) 顺序查询出每个部门的员工 (Department, Employee, Salary)SELECT dep.Name Department, emp.Name Employee, emp.SalaryFROM Employee empINNER JOIN Department dep ON emp.DepartmentId = dep.IdORDER BY emp.DepartmentId, emp.Salary DESC
2.每个部门的员工根据薪水进行排序
由于原本没有排序的字段,所以这里就需要自定义变量补充一个字段出来
## 先(部门,薪水)去重,再 部门(升),薪水(降) 排序SELECT te.DepartmentId, te.Salary, CASE WHEN @pre = DepartmentId THEN @rank:= @rank + 1 WHEN @pre := DepartmentId THEN @rank:= 1 END AS RANKFROM (SELECT @pre:=null, @rank:=0)tt, (## (部门,薪水)去重,根据 部门(升),薪水(降) 排序 SELECT DepartmentId,Salary FROM Employee GROUP BY DepartmentId,Salary ORDER BY DepartmentId,Salary DESC )te
组合步骤
组合步骤时,尽量将每个步骤变成一个 结果集(不存在二次查询) 再将所有步骤的 结果集进行关联,从而提高性能SELECT dep.Name Department, emp.Name Employee, emp.SalaryFROM (## 自定义变量RANK, 查找出 每个部门工资前三的排名 SELECT te.DepartmentId, te.Salary, CASE WHEN @pre = DepartmentId THEN @rank:= @rank + 1 WHEN @pre := DepartmentId THEN @rank:= 1 END AS RANK FROM (SELECT @pre:=null, @rank:=0)tt, (## (部门,薪水)去重,根据 部门(升),薪水(降) 排序 SELECT DepartmentId,Salary FROM Employee GROUP BY DepartmentId,Salary ORDER BY DepartmentId,Salary DESC )te )tINNER JOIN Department dep ON t.DepartmentId = dep.IdINNER JOIN Employee emp ON t.DepartmentId = emp.DepartmentId and t.Salary = emp.Salary and t.RANK <= 3ORDER BY t.DepartmentId, t.Salary DESC ## t 结果集已有序,根据该集合排序
转载地址:https://blog.csdn.net/qq_45292079/article/details/107378960 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年09月11日 14时29分33秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
京东技术架构(一)构建亿级前端读服务
2019-05-27
php 解决json_encode中文UNICODE转码问题
2019-05-27
LNMP 安装 thinkcmf提示404not found
2019-05-27
PHP empty、isset、innull的区别
2019-05-27
apache+nginx 实现动静分离
2019-05-27
通过Navicat远程连接MySQL配置
2019-05-27
phpstorm开发工具的设置用法
2019-05-27
Linux 系统挂载数据盘
2019-05-27
Git基础(三)--常见错误及解决方案
2019-05-27
Git(四) - 分支管理
2019-05-27
PHP Curl发送数据
2019-05-27
HTTP协议
2019-05-27
HTTPS
2019-05-27
git add . git add -u git add -A区别
2019-05-27
apache下虚拟域名配置
2019-05-27
session和cookie区别与联系
2019-05-27
PHP 实现笛卡尔积
2019-05-27
Laravel中的$loop
2019-05-27
CentOS7 重置root密码
2019-05-27