LeetCode SQL(一)

本篇博客会不定时更新

组合两个表

SELECT a.FirstName,a.LastName,b.City,b.State from Person a left join Address b USING(PersonID);
SElECT a.FirstName,a.LastName,b.City,b.State from Person a left join Address b on a.PersonID=b.PersonID;

可以使用USING()这个语法

第二高的薪水

SELECT IFNULL((SELECT DISTINCT Salary FROM Employee order by Salary desc limit 1 offset 1),null) AS SecondHighestSalary

第一个SELECT后面是没有加括号的,写的时候可以先不用写最外层的SELECT,先把里面的写好,里面的SELECT得到的是一个值,IFNULL函数再对这个值进行判断得出来一个值,但是这个值不能输出到页面上,需要最外面的SELECT选中
DISTINCT是放到SELECT之后的,而且只能放到字段的最前面,是没有括号的

第N高的薪水

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
    SET N:= N-1;
    RETURN(
        SELECT Salary from Employee group by Salary order by Salary DESC limit N,1
    );
END

注意函数的使用,函数和Go的函数类似是参数和返回值类型是写到后面的,GROUP BY放到ORDER BY之前

分数排名

select a.Score as Score,
(select count(distinct b.Score) from Scores b where b.Score >= a.Score) as 'rank'
from Scores a
order by a.Score DESC

里面的SELECT得到的是RANK,这个RANK是通过外部的字段比较得到的,理解上可以从每一个行来理解,SELECT的是每一行的数据
起别名的时候字段不要忘记加别名.字段

posted @ 2021-03-17 19:43  小刘的早餐店  阅读(86)  评论(0编辑  收藏  举报