LeetCode-Database解题思路
1.组合两个表
left join
2.第二高的薪水
https://leetcode-cn.com/problems/second-highest-salary/solution/di-er-gao-de-xin-shui-by-leetcode/
子查询:首先找到最高的薪水,然后除了这一条记录(not in)再进行查询最高薪水
官方算法1:
使用子查询和 LIMIT 子句:将不同的薪资按降序排序,然后使用 LIMIT 子句获得第二高的薪资。
官方算法2:IFNULL(每个数据库的函数不太一样,https://www.runoob.com/sql/sql-isnull.html)
备注:
① select * from table limit 2,1;
//含义是跳过2条取出1条数据,limit后面是从第2条开始读,读取1条信息,即读取第3条数据
② select * from table limit 2 offset 1;
//含义是从第1条(不包括)数据开始取出2条数据,limit后面跟的是2条数据,offset后面是从第1条开始读取,即读取第2,3条
offset X 是跳过X个数据
limit Y 是选取Y个数据
limit X,Y 中X表示跳过X个数据,读取Y个数据
3.第N高的薪水
总体思路和第二高的薪水差不多,但是多了一个设置一个参数;
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT BEGIN declare m int ; set m = N - 1; RETURN ( # Write your MySQL query statement below. ifnull((select distinct salary from Employee order by salary desc limit M,1),NULL) ); END
4.分数排名
SQL四大排名函数:https://www.cnblogs.com/52XF/p/4209211.html
这一题用:
select DENSE_RANK() OVER(order by [UserId]) as den_rank,* from [Order]
# Write your MySQL query statement below select Score,DENSE_RANK() over (order by Score desc) as `Rank` from Scores
5.连续出现的数字
这一题审题很关键诶,以为是出现3次的数字,直接用group by having count就可以了,没想到是连续出现的数字....
6.苹果和橘子
子查询以及sum case when

浙公网安备 33010602011771号