【SQL】牛客sql题库答案汇总(1-20)

个人提交答案汇总,part1
解答比较繁琐,有建议或好的想法欢迎评论区指出探讨=w=


1、查找最晚入职员工的所有信息

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

2、查找入职员工时间排名倒数第三的员工所有信息

//第一种(注意rank的用法)
select * from employees
where hire_date == (
    select hire_date from (
        select rank() over( order by hire_date desc ) as rank, hire_date
        from employees ) a
    where rank = 3
)
//第二种(注意limit的用法)
select * from employees order by hire_date desc limit 2,1;

3、查找各个部门领导薪水详情以及其对应部门编号dept_no

select salaries.emp_no as emp_no,
       salaries.salary as salary,
       salaries.from_date as from_date,
       salaries.to_date as to_date,
       dept_manager.dept_no as dept_no
from salaries, dept_manager
where salaries.emp_no = dept_manager.emp_no
order by salaries.emp_no 

4、查找所有已经分配部门的员工的last_name和first_name以及dept_no

select employees.last_name,
       employees.first_name,
       dept_emp.dept_no
from employees, dept_emp
where employees.emp_no = dept_emp.emp_no

5、查找所有已经分配部门的员工的last_name和first_name以及dept_no

select employees.last_name,
       employees.first_name,
       dept_emp.dept_no
from employees left join dept_emp
on employees.emp_no = dept_emp.emp_no

7、查找薪水记录超过15次的员工号emp_no以及其对应的记录次数t

select emp_no, t
from(
    select emp_no, count(*) as t
    from salaries 
    group by emp_no
    )
where t > 15

8、找出所有员工具体的薪水salary情况

select distinct salary
from salaries
order by salary desc

10、找出所有非部门领导的员工emp_no

select emp_no
from employees
where emp_no not in(
    select emp_no
    from dept_manager
)

11、获取所有的员工和员工对应的经理

select emp.emp_no, man.emp_no
from dept_emp emp join dept_manager man
on emp.emp_no <> man.emp_no and emp.dept_no = man.dept_no

12、获取所有部门中员工薪水最高的相关信息

select dep.dept_no, dep.emp_no, max(sal.salary)
from dept_emp dep join salaries sal
on dep.emp_no = sal.emp_no 
group by dep.dept_no 

15、查找employees表所有emp_no为奇数,且last_name不为Mary的员工信息

select * from employees
where (emp_no % 2) <> 0 and last_name <> 'Mary'
order by hire_date desc

16、统计出各个title类型对应的员工薪水对应的平均工资avg

select titles.title,
       avg(salaries.salary)
from titles, salaries
where titles.emp_no = salaries.emp_no
group by titles.title
order by avg(salaries.salary);

17、获取薪水第二多的员工的emp_no以及其对应的薪水salary

select emp_no, salary
from salaries 
order by salary desc
limit 1,1;

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

select employees.emp_no,
       salaries.salary,
       employees.last_name,
       employees.first_name
from employees, salaries
where employees.emp_no = salaries.emp_no and 
salaries.salary in (
    select max(salary) from salaries 
    where salary <>
    (
        select max(salary)
        from salaries
    )
)

19、查找所有员工的last_name和first_name以及对应的dept_name,也包括暂时没有分配部门的员工

select employees.last_name,
       employees.first_name,
       departments.dept_name
from (employees left join dept_emp
on employees.emp_no = dept_emp.emp_no) 
left join departments on departments.dept_no = dept_emp.dept_no

你可能感兴趣的:(数据库,sql,数据库,mysql)