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

 

posted @ 2020-06-08 17:33  Astronaut  阅读(197)  评论(0)    收藏  举报