#随记牛客sql题-牛客1-87题 实际74题

这篇博客整理了牛客网的74道SQL题目,涉及员工信息查询、部门领导薪资、部门员工分布、薪水涨幅、员工排名等多个方面,通过这些题目展示了SQL在数据查询和分析中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#随记牛客sql题-牛客1-87题 实际74题

1、查找最晚入职员工的所有信息
select * from employees order by hire_date desc limit 1

select * from employees where hire_date = (select max(hire_date) from employees)

2、查找入职员工时间排名倒数第三的员工所有信息
select * from employees order by hire_date desc limit 2,1

3、查找各个部门当前领导当前薪水详情以及其对应部门编号dept_no
select s.*,d.dept_no from salaries s inner join dept_manager d on s.emp_no = d.emp_no order by s.emp_no

4、查找所有已经分配部门的员工的last_name和first_name
select e.last_name,e.first_name,d.dept_no from employees e inner join dept_emp d on e.emp_no = d.emp_no

5、查找所有员工的last_name和first_name以及对应部门编号dept_no
select e.last_name,e.first_name,d.dept_no from employees e left join dept_emp d on e.emp_no = d.emp_no

6、查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t
select emp_no,count(*) t from salaries group by emp_no having t > 15

7、找出所有员工当前具体的薪水salary情况
select salary from salaries group by salary order by salary desc

8、获取所有非manager的员工emp_no
select e.emp_no from employees e left join dept_manager d on e.emp_no = d.emp_no
where d.emp_no is null group by e.emp_no

9、获取所有员工当前的manager
select p.emp_no emp_no,r.emp_no manager from dept_emp p inner join dept_manager r on p.dept_no = r.dept_no
where p.emp_no <> r.emp_no

10、获取所有部门中当前员工薪水最高的相关信息
select mp.dept_no,mp.emp_no,re.salary from dept_emp mp inner join salaries es on mp.emp_no = es.emp_no,
(select dept_no,max(s.salary) salary from dept_emp d inner join
salaries s on d.emp_no = s.emp_no
where d.to_date = ‘9999-01-01’ and s.to_date=‘9999-01-01’
group by dept_no) re
where mp.dept_no = re.dept_no and es.salary = re.salary
and mp.to_date=‘9999-01-01’ and es.to_date=‘9999-01-01’
ORDER BY mp.dept_no

11、查找employees表所有emp_no为奇数,且last_name不为Mary的员工信息,并按照hire_date逆序排列
select * from employees where emp_no % 2 = 1 and last_name <> ‘Mary’ order by hire_date desc

12、统计出各个title类型对应的员工薪水对应的平均工资avg。结果给出title以及平均工资avg,并且以avg升序排序
select t.title,avg(s.salary) from titles t inner join salaries s on t.emp_no = s.emp_no
group by t.title

13、获取薪水第二多的员工的emp_no以及其对应的薪水salary
select emp_no,salary from salaries order by salary desc limit 1,1

14、查找薪水排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不能使用order by完成,

select e.emp_no,s.salary,e.last_name,e.first_name from employees e inner join salaries s on e.emp_no = s.emp_no
where salary in (select max(salary) from salaries where salary <> (select max(salary) from salaries) )

15、查找所有员工的last_name和first_name以及对应的dept_name,也包括暂时没有分配部门的员工
select e.last_name,e.first_name,s.dept_name from employees e left join dept_emp d on e.emp_no = d.emp_no
left join departments s on d.dept_no = s.dept_no

16、查找所有员工自入职以来的薪水涨幅情况,给出员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序,以上例子输出为
(注:可能有employees表和salaries表里存在记录的员工,有对应的员工编号和涨薪记录,但是已经离职了,
离职的员工salaries表的最新的to_date!=‘9999-01-01’,这样的数据不显示在查找结果里面,以上emp_no为2的就是这样的)

select s1.emp_no,(s1.salary-s2.salary) as growth
from (select emp_no,salary from salaries where to_date=‘9999-01-01’) as s1
inner join (select e.emp_no ,s.salary from employees e left join salaries s
on e.emp_no=s.emp_no and e.hire_date=s.from_date ) as s2
on s1.emp_no = s2.emp_no
order by growth

17、统计各个部门的工资记录数,给出部门编码dept_no、部门名称dept_name以及部门在salaries表里面有多少条记录sum,
按照dept_no升序排序

select d.dept_no,d.dept_name,count(s.emp_no) sum
from departments d
left join dept_emp p on d.dept_no = p.dept_no
inner join salaries s on p.emp_no = s.emp_no group by d.dept_no
order by d.dept_no

18、对所有员工的薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列

select emp_no,salary,
dense_rank() over(order by salary desc) as ‘rank’
from salaries
where to_date = ‘9999-01-01’
order by ‘rank’

19、获取所有非manager员工薪水情况,给出dept_no、emp_no以及salary
select s1.dept_no,s1.emp_no,s1.salary from
(select d.emp_no,d.dept_no,s.salary from dept_emp d
inner join salaries s on d.emp_no = s.emp_no) s1
left join dept_manager d on s1.emp_no = d.emp_no where d.emp_no is null

20、获取员工其当前的薪水 比其manager当前薪水还高的相关信息,
第一列给出员工的emp_no,
第二列给出其manager的manager_no,
第三列给出该员工当前的薪水emp_salary,
第四列给该员工对应的manager当前的薪水man

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值