发布时间:2026/7/13 5:35:41
MySQL复盘② 第8-15题 题目原文8.使用窗口函数row_number()查询每个部门中按工资降序排列的员工排名。9.使用窗口函数rank()查询所有员工按工资降序的排名。10.使用窗口函数dense_rank()查询所有员工按工资降序的排名。11.使用 CTE先查询出每个部门的平均工资再查询平均工资高于 8500 的部门及其平均工资。12.使用 CTE查询每个部门工资排名前 2 的员工按工资降序。13.查询工资比所在部门平均工资高的员工姓名、工资和部门编号使用子查询作为条件。14.使用窗口函数查询每个部门的员工按工资降序排列并计算该员工工资占部门总工资的百分比。15.使用窗口函数row_number()查询整个公司工资排名第 3 到第 5 名的员工姓名、工资和排名。第8-15题 考点对照题号核心考点8row_number()partition by9rank()全公司排名跳号10dense_rank()全公司排名不跳号11CTE 聚合函数 关联查询12CTE row_number() 筛选前N名13关联子查询比所在部门平均工资高14窗口函数sum() over() 百分比计算15CTE row_number()between范围筛选#8selectemployees.emp_name,employees.dept_id,employees.salary,row_number()over(partitionbydept_idorderbysalarydesc)as排行fromemployees;#9selectemp_name,employees.salary,rank()over(orderbysalarydesc)as排行fromemployees;#10selectemp_name,employees.salary,dense_rank()over(orderbysalarydesc)as排行fromemployees;#11/* with 临时表名 as ( 子查询语句 ) select * from 临时表名; *//*子查询 平均工资 select dept_id, avg(employees.salary) as avgs from employees group by dept_id; */witht11as(selectdept_id,avg(employees.salary)asavgsfromemployeesgroupbydept_id)selectdept_name,avgsfromt11joindepartmentsondepartments.dept_idt11.dept_idwhereavgs8500;#12/* select *, row_number() over (partition by employees.dept_id order by employees.salary desc ) as srank from employees; *//* with t12 as ( select *, row_number() over (partition by employees.dept_id order by employees.salary desc ) as srank from employees ) select * from t12 where srank 2; */witht12as(selectdept_id,employees.emp_name,employees.salary,row_number()over(partitionbyemployees.dept_idorderbyemployees.salarydesc)assrankfromemployees)selectt12.emp_name,t12.salary,dept_namefromt12joindepartmentsont12.dept_iddepartments.dept_idwheret12.srank2;#13/* 大于公司平均工资 select emp_name,salary,dept_id from employees where salary (select avg(employees.salary) as savg from employees); */#部门佼佼者selecte.emp_name,e.salary,e.dept_idfromemployees ewheree.salary(selectavg(salary)fromemployeeswheredept_ide.dept_id);#14select*,row_number()over(partitionbydept_idorderbysalarydesc)assrank,sum(salary)over(partitionbydept_id)as总和,concat(round(salary/sum(salary)over(partitionbydept_id),2)*100,%)as占比fromemployees e;#15/*错误写法 where 不允许聚合函数 应该使用子查询 select e.name,e.salary row_number() over (order by salary desc ) as srank from employees e where e.srank between 3 and 5; */select*,row_number()over(orderbysalarydesc)assrankfromemployees;selectt.emp_name,t.salary,t.srankfrom(select*,row_number()over(orderbysalarydesc)assrankfromemployees)astwheret.srankbetween3and5;卡壳点汇总题号 出错点 错误类型8 别名 排行 缺少右引号 语法错误9 别名 排行 缺少右引号 语法错误10 dense_rank() 没有加 over() 和 order by 语法错误11 group by 写在 from 前面 语法顺序错误11 分号放错位置导致 group by 变成独立语句 语法错误11 关联条件写错自己自己 逻辑错误12 误用 group by 取前N名 思路错误13 子查询中 dept_id 没有用外层别名区分 关联子查询错误14 row_number() 和 sum() 之间缺少逗号 语法错误14 over(pa) 没写完 语法错误14 用 row_number() 去除算百分比 逻辑错误15 select 中列之间缺少逗号 语法错误15 where 中直接使用窗口函数别名 执行顺序错误核心知识点总结窗口函数三件套sqlrow_number() over (partition by 分组列 order by 排序列 排序方式) – 唯一序号不并列rank() over (order by 排序列 排序方式) – 并列跳号dense_rank() over (order by 排序列 排序方式) – 并列不跳号函数 工资相同 下一个排名row_number() 不并列分1、2 3rank() 并列1、1 3跳号dense_rank() 并列1、1 2不跳号窗口函数的两大限制限制 说明 解决方案❌ 不能在 where 中使用 where 执行在 select 之前别名还不存在 用子查询或 CTE 包一层再筛选❌ 不能直接用于除法函数嵌套错误 用 row_number() 去除没有意义 用 salary 去除关联子查询sql– 比所在部门平均工资高select e.*from employees ewhere e.salary (select avg(salary)from employeeswhere dept_id e.dept_id – 关键用外层别名关联);要点外层一定要起别名子查询中用这个别名来关联。CTE 标准模板取前N名sqlwith 临时表名 as (select *,row_number() over (partition by 分组列 order by 排序列 desc) as rnfrom 原表)select *from 临时表名where rn N;执行顺序重要sqlfrom – 1. 确定数据源where – 2. 行级筛选此时还没有窗口函数group by – 3. 分组having – 4. 组级筛选select – 5. 选择列窗口函数在这里生成order by – 6. 排序所以where 中不能引用窗口函数别名因为窗口函数在 select 阶段才生成。逗号规则老问题sqlselect 列1, – ✅ 后面还有列加逗号列2, – ✅ 后面还有列加逗号列3 – ✅ 最后一项不加逗号from 表;换行不等于分隔逗号才是分隔符总结窗口函数三兄弟rank 跳号 dense 连row_number 唯一序where 里面不能用子查询或 CTE 来包关联子查询要记牢外层别名内层用逗号分隔最后不加换行不能代替它。

相关新闻

2026/7/13 5:35:41

C++模拟算法实战:从时间步长到离散事件,掌握系统建模核心

1. 项目概述:为什么模拟算法是程序员的“万能钥匙”?如果你写过C,大概率遇到过这样的场景:题目描述了一个复杂的流程,比如银行排队、电梯调度,或者一个物理小球在桌面上弹跳。你的第一反应可能是去找有没有…

2026/7/13 5:35:41

Axure RP 9 动态面板实现无限级树形菜单:3步交互逻辑与变量控制详解

Axure RP 9 动态面板实现无限级树形菜单:3步交互逻辑与变量控制详解树形菜单作为信息架构可视化的重要组件,在产品原型设计中扮演着关键角色。本文将深入解析如何利用Axure RP 9的动态面板和中继器,构建支持无限层级扩展的智能树形菜单系统。…

2026/7/13 5:35:41

Spring AI + Ollama + Qwen3.5,快速搭建一个ai应用

零成本,不联网,一台普通办公本就能跑。 你需要准备 JDK 17 8GB 以上内存 4G以上显卡(虽然ollama可以用cpu,但是token吞吐太慢了) 第一步:装 Ollama,拉模型 ollama.com 下载安装,…

2026/7/13 7:05:48

SAP PM 工单与成本结算配置详解:3种检修场景的财务流程闭环

SAP PM工单成本结算实战:3种检修场景的财务闭环解析在设备密集型企业中,维护成本的精准核算直接影响着资产管理和财务决策的有效性。SAP PM模块作为企业资产管理的核心平台,其工单与成本结算的配置逻辑直接决定了维护业务能否形成完整的财务闭…

2026/7/13 7:05:48

Streamlit低代码前端工程化:声明式UI编译工作流

1. 项目概述:这不是一个“自动写Streamlit”的玩具,而是一套可落地的低代码前端工程化工作流“Auto-Streamlit Studio”这个名字刚看到时,我下意识皱了下眉——又一个带“Auto”的营销词?但真正花三天时间把它从零搭起来、跑通三个…

2026/7/13 7:05:48

TMC7300与PIC24FJ256GB210的有刷直流电机控制方案解析

1. TMC7300与PIC24FJ256GB210的黄金组合解析有刷直流电机(Brushed DC Motor)作为工业自动化领域的主力军,其控制稳定性直接决定了设备性能的上限。在众多驱动方案中,TMC7300电机驱动器与PIC24FJ256GB210微控制器的组合堪称经典配置…

2026/7/13 7:05:48

C++开根号实现:从std::sqrt到牛顿迭代与性能优化

1. 项目概述:为什么C开根号值得深究?看到“C实现开根号操作”这个标题,很多朋友可能会觉得这太简单了,不就是调用一下std::sqrt函数吗?确实,对于99%的日常开发场景,直接使用标准库函数是最高效、…

2026/7/13 7:00:48

A3910与PIC18LF25J11在BLDC电机控制中的黄金组合

1. A3910与PIC18LF25J11的硬件搭档解析A3910是Allegro MicroSystems推出的三相无刷直流(BLDC)电机驱动器,而PIC18LF25J11则是Microchip的8位单片机。这对组合在电机控制领域堪称黄金搭档——前者负责功率驱动,后者处理控制逻辑。我…

2026/7/13 6:38:38

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#…

2026/7/12 0:01:29

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境随着新能源汽车行业的快速发展,充电通信协议的标准化和测试验证变得尤为重要。GB/T 27930-2023作为中国智能充电协议的最新版本,对充电机与电动汽车之间的通信提出了更严格…

2026/7/12 0:01:29

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 还在为Linux系统无法识别RTL8852BE Wi-Fi 6网卡而烦恼吗?&#x1f…

2026/7/13 0:00:24

广氟 PTFE 高速线缆膜 —— 高端线缆绝缘材料新选择

PTFE高速线缆膜的基本概念与特点 PTFE 高速线缆膜是以聚四氟乙烯树脂为原料,经膨化双向拉伸制成的多孔绝缘薄膜,作为高速高频通信线缆的核心介质材料,内部形成均匀连通的微孔结构,兼具极低介电常数与介电损耗,能有效降…

2026/7/12 11:21:32

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…