牛客网SQL部分题目解析

这篇博客记录了一个SQL查询错误及解决方案,涉及到了数据库查询优化和子查询的使用。作者通过分析错误代码,展示了如何从dept_emp和salaries表联接查询中,正确地获取每个部门的最高薪资及其对应的员工编号。最后给出了修正后的查询语句,确保了在分组查询中只选择部门编号和最大薪资,并通过子查询匹配最高薪资的emp_no。
摘要由CSDN通过智能技术生成

记录下自己的错题以及反思,以便以后复习用

【12题】> 困难

[错误答案]

select dept_no,s.emp_no, max(salary) maxSalary
from dept_emp de join salaries s on de.emp_no=s.emp_no 
group by dept_no
order by dept_no

[分析] 错误代码无法运行

1.两表join

select de.emp_no, dept_no, salary 
from dept_emp de join salaries s on de.emp_no=s.emp_no 
order by dept_no

求每个部门的maxsalary——group by dept_no  

分组后无法select emp_no(使用group by子句时,select子句中只能有聚合键、聚合函数、常数

2.需要先将emp_no剔除,求出每部门maxsalary

select  dept_no, max(salary) 
from dept_emp de join salaries s on de.emp_no=s.emp_no 
group by dept_no
order by dept_no

 

 3.使用where 查询maxsalary对应emp_no

#正确答案

select dept_no,s.emp_no,salary maxSalary
from dept_emp de join salaries s on de.emp_no=s.emp_no 
where (dept_no,salary) in (select dept_no,max(salary)
                              from dept_emp de join salaries s 
               on de.emp_no=s.emp_no 
               
               group by dept_no)
order by dept_no

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值