本文主要是介绍SQL刷题笔记day2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1 题目
我的通过代码:
select salary from salaries
group by salary
order by salary desc
复盘:考点是只显示一次——group by,逆序(从大到小)——order by...desc
2题目
我的错误代码:
select employees.emp_no from employees
where employees.emp_no not in dept_manager.emp_no
正确答案
SELECT emp_no FROM employees
WHERE emp_no NOT IN (SELECT emp_no FROM dept_manager)
复盘:我的思路是对的,非领导员工,就用not in,但是格式错误,not in后面应该接不含null的数据集,而不是属性名,这里要用select返回。
not in用法学习链接:https://blog.csdn.net/yeahPeng11/article/details/111144892
3题目
我的代码:
select dept_emp.emp_no,dept_manager.emp_no manager
from dept_emp right join dept_manager
on dept_emp.dept_no = dept_manager.dept_no
正确代码:
select dept_emp.emp_no,dept_manager.emp_no manager
from dept_emp join dept_manager
on dept_emp.dept_no = dept_manager.dept_no
where dept_emp.emp_no != dept_manager.emp_no
复盘:题目马虎了,题目说如果员工本身是经理的话则不显示,即要加一个where dept_emp.emp_no != dept_manager.emp_no,否则有可能自己是经理的情况。此外join的方式在这里没有影响,因为只看的是都非null的emp_no
4题目
我的错误代码:
select d.dept_no, d.emp_no,s.salary
from dept_emp d join salaries s
on d.10001=s.emp_no
group by d.dept_no
order by d.dept_no asc
正确代码:
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
/*gruop by 之后直接查询emp_no默认取非聚合的第一条,不符合我们的目的*/
group by dept_no)
order by dept_no
复盘:问题关键是求得每个部门的最大薪水,并和员工对应,这样才能找到对应部门对应薪水的员工号,可以使用联合条件,同时找出部门号和最大薪水,然后通过表连接找到该部门(该最大薪水)对应的员工号即可。
5问题
我的错误代码:
select emp_no
from employees
where (int(emp_no)%2) not in 0 and last_name not in 'Mary'
order by hire_date desc
正确代码:
select *
from employees
where (emp_no)%2!=0 and last_name not in ('Mary')
order by hire_date desc
复盘:字符串不仅要引号还要括号()
6题目
我的正确代码
select t.title,avg(s.salary)
from titles t join salaries s
on t.emp_no=s.emp_no
group by t.title
order by avg(s.salary) asc
复盘:统计出各个title类型对应,就要以title进行分组。
(感冒了头有点痛,明天再来吧,追剧去了 追剧可缓解头痛)
这篇关于SQL刷题笔记day2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!