返回

面试中的高频考点:精通SQL排名和窗口函数

人工智能

引言

在当今数据驱动的世界中,SQL已成为数据库管理和数据分析的必备工具。对于有抱负的技术人员来说,掌握SQL排名和窗口函数对于面试成功至关重要。本文将深入探讨这些概念,并提供清晰的示例和实战指导,帮助您自信地应对面试中的技术挑战。

SQL排名

排名函数允许我们在SQL查询结果中对行进行排序。它们通常用于确定排名、评级或特定条件下的位置。以下是一些常见的排名函数:

  • RANK(): 为每个组中的行分配一个排名,从1开始。
  • DENSE_RANK(): 为每个组中的行分配一个排名,没有空隙。
  • ROW_NUMBER(): 为表中的每一行分配一个顺序数字。

窗口函数

窗口函数允许我们在查询结果中对一组行进行聚合计算。它们通过在数据的一个“窗口”上应用聚合函数来实现,该窗口可以根据行号、范围或其他标准定义。以下是一些常见的窗口函数:

  • SUM(): 计算窗口内值的总和。
  • AVG(): 计算窗口内值的平均值。
  • MAX(): 返回窗口内值的最高值。
  • MIN(): 返回窗口内值的最低值。

实战指导

LeetCode-178:分数排名

LeetCode-178是一个经典的SQL排名面试题,要求我们对学生的分数进行排名。以下是解决此问题的步骤:

-- 创建学生表
CREATE TABLE Students (
    id INT NOT NULL,
    name VARCHAR(255) NOT NULL,
    score INT NOT NULL
);
-- 插入数据
INSERT INTO Students (id, name, score) VALUES
(1, 'John', 90),
(2, 'Mary', 85),
(3, 'Bob', 95),
(4, 'Alice', 80),
(5, 'Tom', 92);
-- 查询排名
SELECT id, name, score, RANK() OVER (ORDER BY score DESC) AS rank
FROM Students;

结果:

id name score rank
3 Bob 95 1
5 Tom 92 2
1 John 90 3
2 Mary 85 4
4 Alice 80 5

优化提示

  • 索引: 为经常用于排名和窗口函数的列创建索引,以提高查询性能。
  • 合适的功能: 选择最适合特定用例的排名或窗口函数。
  • 窗口框架: 仔细定义窗口框架,以确保计算准确无误。

总结

SQL排名和窗口函数是SQL工具箱中的强大工具,对于处理复杂数据分析问题至关重要。通过深入理解这些概念并掌握实战指导,您可以自信地应对面试中的技术挑战。持续练习和探索实际场景将帮助您精通这些技能,并为您的职业生涯打开更多机会。