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的是每一行的数据
起别名的时候字段不要忘记加别名.字段

原文地址:https://www.cnblogs.com/lis2/p/leetcode_sql.html