AIGC ChatGPT4完成业务需求SQL学习
源表如下:https://i-blog.csdnimg.cn/blog_migrate/1735fade0c82f82667cfd2096c7ffc7d.png
例如现在需要显示每个岗位中工资排名前10位的员工信息,并显示排名应该要怎么做呢?
Prompt: 有一个某公司职员表,表名为Bank_emp,empno为员工编号,ename为员工姓名,JOB为员工岗位,sal为工资,dept为部分,
请写出一个SQL语句来查询每个岗位下工资排名前10位的员工信息,显示员工编号,姓名,岗位,工资,部分,排名?
https://i-blog.csdnimg.cn/blog_migrate/81b441a96817dd8ef332c54ec82e5bc9.png
这个题目同样可以利用窗口函数ROW_NUMBER()或RANK()或DENSE_RANK()来办理。以下是利用ROW_NUMBER()的SQL语句:
sql复制代码
WITH ranked_employees AS ( SELECT empno, ename, JOB, sal, dept, ROW_NUMBER() OVER(PARTITION BY JOB ORDER BY sal DESC) as rank FROM Bank_emp ) SELECT empno, ename, JOB, sal, dept, rank FROM ranked_employees WHERE rank <= 10;
在这个查询中,我们先在ranked_employees的CTE中,为每个岗位的每个员工分配一个基于其工资降序排列的排名。然后,在主查询中,我们只选择每个岗位的排名在前10位的员工。
注意,如果你想在同一岗位、同一工资下有多个员工共享同一排名,可以利用RANK()或DENSE_RANK()代替ROW_NUMBER()。
将SQL复制到Navicat中进行测试;
https://i-blog.csdnimg.cn/blog_migrate/545e3c73d2406574120f57f5e1364604.png
将每个部分每个岗位下前10名的员工信息显示出来了。
接下来我们继续完成别的需求
例如 : 要显示工资大于整个人力资源部分的员工信息,要怎么实现呢?
Prompt : 有一个某公司职员表,表名为Bank_emp,empno为员工编号,ename为员工姓名,JOB为员工岗位,sal为工资,dept为部分,
请写出一个SQL语句来查询工资大于全部人力资源部的员工信息,显示员工编号,姓名,岗位,工资,部分?
https://i-blog.csdnimg.cn/blog_migrate/84356ce0b5a64a2ea5a96233a4d9e15c.png
要查询工资大于全部人力资源部员工的员工信息,您可以利用下列SQL语句。它首先在子查询中找到人力资源部的最高工资,然后在主查询中查找工资高于这个值的全部员工。
sql复制代码
SELECT empno, ename, JOB, sal, dept FROM Bank_emp WHERE sal > ( SELECT MAX(sal) FROM Bank_emp WHERE dept = '人力资源部' );
在这个查询中,“SELECT MAX(sal) FROM Bank_emp WHERE dept = '人力资源部'”是一个子查询,它会返回人力资源部的最高工资。然后,主查询将找出工资大于这个值的全部员工。请注意,这个语句假设'dept'列包含部分名称,如'人力资源部'。如果您的表结构差别,可能需要稍微修改这个查询以顺应您的需求。
将SQL复制到Navicat中进行测试;
https://i-blog.csdnimg.cn/blog_migrate/bb73f5c5a1daea674f3e390aeba0a36a.png
接下来我们完成下一个实例:
例如要显示每个岗位中工资最高的员工信息
Prompt: 有一个某公司职员表,表名为 Bank_emp,empno 为员工编号,ename为员工姓名,JOB为员工岗位,sal为工资,dept为部分,
请写出一个SQL语句来查询每个岗位下工资最高的员工信息,显示员工编号,姓名,岗位,工资,部分?
https://i-blog.csdnimg.cn/blog_migrate/110bdca5c8ebcd139b3aed50ba76e7f3.png
要查询每个岗位下工资最高的员工信息,可以利用窗口函数ROW_NUMBER()配合OVER()子句。假设同一岗位、同一工资下只有一个员工,SQL语句如下:
sql复制代码
WITH ranked_employees AS ( SELECT empno, ename, JOB, sal, dept, ROW_NUMBER() OVER(PARTITION BY JOB ORDER BY sal DESC) as rank FROM Bank_emp ) SELECT empno, ename, JOB, sal, dept FROM ranked_employees WHERE rank = 1;
这个查询首先在ranked_employees的CTE (Common Table Expressions,即公用表表达式) 中,为每个岗位的每个员工分配一个基于其工资降序排列的排名。然后,在主查询中,我们只选择每个岗位的排名为1(即工资最高)的员工。
如果同一岗位、同一工资下可能有多个员工,可以利用RANK()或DENSE_RANK()代替ROW_NUMBER(),如许会为具有相同工资的员工分配相同的排名。
将SQL复制到Navicat中进行测试;
https://i-blog.csdnimg.cn/blog_migrate/7484df4145b71d58d0ad3d304796e11a.png
每个岗位工资最高的员工信息显示出来了。
更多精彩内容:
AIGC ChatGPT 职场案例
AI 绘画 与 短视频制作
PowerBI 商业智能 68集
数据库Mysql 8.0 54集
数据库Oracle 21C 142集
Office 2021实战应用
Python 数据分析实战,
ETL Informatica 数据堆栈案例实战
Excel 2021实操 100集,
Excel 2021函数大全 80集
Excel 2021高级图表应用89集,
Excel 2021大屏可视化制作 56集
Excel 2021实用本领300集
PPT 2021 商业汇报实战应用69集
数据分析可视化Tableau 80集
数据可视化FineReport 50集
送你各类文档模板PPT,表格,大屏可视化 高出5000+模板
案例实战 https://edu.csdn.net/combo/detail/2552
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]