SQL 解题模板
适用场景
多表查询、聚合统计、排名、连续问题
常用模式
JOIN
-- LEFT JOIN:保留左表所有行
SELECT p.FirstName, p.LastName, a.City, a.State
FROM Person p
LEFT JOIN Address a ON p.PersonId = a.PersonId;
排名窗口函数
-- DENSE_RANK:不跳号排名
SELECT score, DENSE_RANK() OVER (ORDER BY score DESC) AS 'rank'
FROM Scores;
-- ROW_NUMBER:行号
-- RANK:跳号排名
TOP N
-- 第 N 高
SELECT DISTINCT salary
FROM Employee
ORDER BY salary DESC
LIMIT 1 OFFSET N-1;
子查询
-- 部门最高工资
SELECT d.name AS Department, e.name AS Employee, e.salary AS Salary
FROM Employee e
JOIN Department d ON e.departmentId = d.id
WHERE (e.departmentId, e.salary) IN (
SELECT departmentId, MAX(salary)
FROM Employee
GROUP BY departmentId
);
关键要点
-
JOIN 分清 INNER/LEFT/RIGHT
-
窗口函数解决排名类问题
-
连续问题用自连接
-
分组取前 N:相关子查询或窗口函数
→ 查看该分类题目:LeetCode学习路线图 > 十六、SQL高频