2018.8.9SQL数据库学习笔记

今天将leetcode上19道数据库的题刷完了 明天做什么暂时还没有明确计划

对于搜索最大并不困难,只需要max(项)即可,对于搜索第二大项,就需要搜索max(项) 以及 该项小于max(项)

select max(项) from where 项 < max(项)(176.第二高的薪水)

改变思路,从复杂的更换名字变为更换ID。判断id是奇数还是偶数,除此以外奇数时判断id是否为最大id,使用case when when else语句即可作好更换,随后利用count计数再用order by重新排序即可(626.换座位)

语法上面有点新奇,需要先用一个count(distinct)语句来消除分数的并列,随后使用score与单个score对比进行排名,最后使用order by语句重新排序(178.分数排名)

由于连续出现三次因此采用表实例化,实例化为三个一样的表,后两个表ID平移一位和两位,最后三个表同一位ID数字进行对比,如果一样则复合,除此以外还需要使用distinct语句来消去重复出现的数字(180.连续出现的数字)

比较有趣的函数编写题目 order by语句后的扩展(177.第N高的薪水)

这道题有点神奇,使用datediff语句比较难消去一些错误的例子,于是选择使用date_add语句会遇到测试案例报错,报错的地点是5月底和6月初的跨度,按道理时间函数是不会有这个错误的,随后看到题目的下方写着

Note:
每天只有一行记录,日期随着 id 的增加而增加。

于是把利用date作判断改为使用id作判断,简单非常多(601.体育馆的人流量)

这道题有几个新的知识点,包括使用round函数来保留小数,还有inner join实现筛选表中符合条件项的需求,最后还用了between and筛选日期区间

关于inner join与前面left join等好几个的差异可以看这个链接,采用了文氏图的画法使得结果非常直观

图解SQL的inner join、left join、right join、full outer join、union、union all的区别(262.行程和用户)

select d.name as department,e.name as employee,e.salary
from department d,employee e
where e.departmentid = d.id and e.salary = (select max(salary) from employee where departmentid=d.id)

where里面的几个筛选语句要考虑好(184.部门工资最高的员工)

这道题跟262其实挺像的,在184的基础上where语句稍作修改即可

(select count(distinct salary) from employee where departmentid=d.id and salary>e.salary)<3

(185.部门工资前三高的员工)

猜你喜欢

转载自blog.csdn.net/qq_39380075/article/details/81541399