2024年09月21日 SQL中的ROW NUMBER函数详解 极客笔记
在SQL中,ROW_NUMBER()是一种用来为查询的结果集中的每一行分配唯一的连续数字的窗口函数。这个函数通常用来对结果集进行排序或者分组,以便更方便地对数据进行分析或者筛选。在本文中,我们将详细讨论ROW_NUMBER函数的用法和示例。
ROW_NUMBER函数的基本语法如下:
ROW_NUMBER() OVER (PARTITION BY column1, column2,... ORDER BY column_name DESC/ASC)
其中:
PARTITION BY
子句可选,用于指定分组的列,如果不提供此子句,则将整个结果集视为一个分组。ORDER BY
子句是必需的,用于指定排序的列,在结果集中的每个分组中按照指定的列进行排序。DESC/ASC
用来指定排序的顺序,DESC表示降序,ASC表示升序。默认情况下为升序排序。假设我们有一个名为students
的表,结构如下:
CREATE TABLE students (
student_id INT,
student_name VARCHAR(50),
score INT
);
INSERT INTO students VALUES (1, 'Alice', 85);
INSERT INTO students VALUES (2, 'Bob', 73);
INSERT INTO students VALUES (3, 'Cathy', 92);
INSERT INTO students VALUES (4, 'David', 78);
INSERT INTO students VALUES (5, 'Emily', 89);
现在我们想要查询每个学生的成绩,并为每个学生的成绩添加一个排名。我们可以使用ROW_NUMBER函数来实现:
SELECT
student_name,
score,
ROW_NUMBER() OVER (ORDER BY score DESC) AS rank
FROM students;
上述查询将返回每个学生的姓名、成绩和排名,按照成绩降序排列。假设结果如下:
| student_name | score | rank |
|--------------|------|------|
| Cathy | 92 | 1 |
| Emily | 89 | 2 |
| Alice | 85 | 3 |
| David | 78 | 4 |
| Bob | 73 | 5 |
从上面的示例中可以看出,ROW_NUMBER函数为每个学生的成绩分配了一个排名,方便我们对学生成绩进行排名或者筛选。
除了对整个结果集进行排序外,我们还可以对结果集进行分组,并在每个分组内对数据进行排序。下面是一个示例:
SELECT
student_name,
score,
ROW_NUMBER() OVER (PARTITION BY score ORDER BY student_name) AS rank
FROM students;
上面的查询将返回每个学生的姓名、成绩和排名,按照成绩分组,然后在每个分组内按照姓名排序。假设结果如下:
| student_name | score | rank |
|--------------|------|------|
| Alice | 85 | 1 |
| Cathy | 88 | 1 |
| David | 78 | 1 |
| Bob | 73 | 1 |
| Emily | 89 | 1 |
在这个示例中,我们通过对成绩进行分组,然后按照姓名排序,为每个学生成绩分配了一个排名。
ROW_NUMBER函数是SQL中一个非常实用的窗口函数,可以为结果集中的每一行分配一个唯一的排名。通过合理地使用ROW_NUMBER函数,我们可以方便地对数据进行排序、筛选和分组,提高数据分析的效率和准确性。
本文链接:http://so.lmcjl.com/news/13588/