排名或顺序的函数 ROW_NUMBER/RANK/DENSE_RANK/NTILE
测试表/数据
CREATE TABLE test_course (
student_name VARCHAR(10), -- 学生
course_name VARCHAR(10), -- 课程
grade INT -- 成绩
);
INSERT INTO test_course VALUES('甲', '语文', 95);
INSERT INTO test_course VALUES('乙', '语文', 85);
INSERT INTO test_course VALUES('丙', '语文', 75);
INSERT INTO test_course VALUES('丁', '语文', 65);
INSERT INTO test_course VALUES('戊', '语文', 55);
INSERT INTO test_course VALUES('己', '语文', 50);
INSERT INTO test_course VALUES('庚', '语文', 60);
INSERT INTO test_course VALUES('辛', '语文', 70);
INSERT INTO test_course VALUES('壬', '语文', 80);
INSERT INTO test_course VALUES('奎', '语文', 90);
INSERT INTO test_course VALUES('甲', '数学', 90);
INSERT INTO test_course VALUES('乙', '数学', 80);
INSERT INTO test_course VALUES('丙', '数学', 70);
INSERT INTO test_course VALUES('丁', '数学', 60);
INSERT INTO test_course VALUES('戊', '数学', 50);
INSERT INTO test_course VALUES('己', '数学', 50);
INSERT INTO test_course VALUES('庚', '数学', 60);
INSERT INTO test_course VALUES('辛', '数学', 70);
INSERT INTO test_course VALUES('壬', '数学', 85);
INSERT INTO test_course VALUES('奎', '数学', 95);
ROW_NUMBER 顺序编号
按照分数 编号 从高到底
SELECT
ROW_NUMBER() OVER( ORDER BY SUM(grade) DESC) AS NO,
student_name,
SUM(grade) AS AllGrade
FROM
test_course
GROUP BY
student_name
ORDER BY
SUM(grade) DESC
1 甲 185
2 奎 185
3 壬 165
4 乙 165
5 丙 145
6 辛 140
7 丁 125
8 庚 120
9 戊 105
10 己 100
按照分数 编号 从高到底(区分 课程)
SELECT
ROW_NUMBER() OVER(PARTITION BY course_name ORDER BY grade DESC) AS NO,
*
FROM
test_course
ORDER BY
course_name,
grade DESC
1 奎 数学 95
2 甲 数学 90
3 壬 数学 85
4 乙 数学 80
5 丙 数学 70
6 辛 数学 70
7 庚 数学 60
8 丁 数学 60
9 戊 数学 50
10 己 数学 50
1 甲 语文 95
2 奎 语文 90
3 乙 语文 85
4 壬 语文 80
5 丙 语文 75
6 辛 语文 70
7 丁 语文 65
8 庚 语文 60
9 戊 语文 55
10 己 语文 50
RANK 排名不连续
按照分数 排名 从高到底
SELECT
RANK() OVER( ORDER BY SUM(grade) DESC) AS NO,
student_name,
SUM(grade) AS AllGrade
FROM
test_course
GROUP BY
student_name
ORDER BY
SUM(grade) DESC
1 甲 185
1 奎 185
3 壬 165
3 乙 165
5 丙 145
6 辛 140
7 丁 125
8 庚 120
9 戊 105
10 己 100
按照分数 排名 从高到底(区分 课程)
SELECT
RANK() OVER(PARTITION BY course_name ORDER BY grade DESC) AS NO,
*
FROM
test_course
ORDER BY
course_name,
grade DESC
1 奎 数学 95
2 甲 数学 90
3 壬 数学 85
4 乙 数学 80
5 丙 数学 70
5 辛 数学 70
7 庚 数学 60
7 丁 数学 60
9 戊 数学 50
9 己 数学 50
1 甲 语文 95
2 奎 语文 90
3 乙 语文 85
4 壬 语文 80
5 丙 语文 75
6 辛 语文 70
7 丁 语文 65
8 庚 语文 60
9 戊 语文 55
10 己 语文 50
DENSE_RANK 排名连续
按照分数 排名 从高到底
SELECT
DENSE_RANK() OVER( ORDER BY SUM(grade) DESC) AS NO,
student_name,
SUM(grade) AS AllGrade
FROM
test_course
GROUP BY
student_name
ORDER BY
SUM(grade) DESC
1 甲 185
1 奎 185
2 壬 165
2 乙 165
3 丙 145
4 辛 140
5 丁 125
6 庚 120
7 戊 105
8 己 100
按照分数 排名 从高到底(区分 课程)
SELECT
DENSE_RANK() OVER(PARTITION BY course_name ORDER BY grade DESC) AS NO,
*
FROM
test_course
ORDER BY
course_name,
grade DESC
1 奎 数学 95
2 甲 数学 90
3 壬 数学 85
4 乙 数学 80
5 丙 数学 70
5 辛 数学 70
6 庚 数学 60
6 丁 数学 60
7 戊 数学 50
7 己 数学 50
1 甲 语文 95
2 奎 语文 90
3 乙 语文 85
4 壬 语文 80
5 丙 语文 75
6 辛 语文 70
7 丁 语文 65
8 庚 语文 60
9 戊 语文 55
10 己 语文 50
NTILE 分组
按照分数 划分5个区间 从高到底
SELECT
NTILE(5) OVER( ORDER BY SUM(grade) DESC) AS NO,
student_name,
SUM(grade) AS AllGrade
FROM
test_course
GROUP BY
student_name
ORDER BY
SUM(grade) DESC
1 甲 185
1 奎 185
2 壬 165
2 乙 165
3 丙 145
3 辛 140
4 丁 125
4 庚 120
5 戊 105
5 己 100
按照分数 划分区间 从高到底(区分 课程)
SELECT
NTILE(5) OVER(PARTITION BY course_name ORDER BY grade DESC) AS NO,
*
FROM
test_course
ORDER BY
course_name,
grade DESC
1 奎 数学 95
1 甲 数学 90
2 壬 数学 85
2 乙 数学 80
3 丙 数学 70
3 辛 数学 70
4 庚 数学 60
4 丁 数学 60
5 戊 数学 50
5 己 数学 50
1 甲 语文 95
1 奎 语文 90
2 乙 语文 85
2 壬 语文 80
3 丙 语文 75
3 辛 语文 70
4 丁 语文 65
4 庚 语文 60
5 戊 语文 55
5 己 语文 50
分享到:
相关推荐
还是以上述为例,当field1字段值相同时,dense_rank函数会连续分配序号,即后三条记录的序号分别为1、1、1,而第4条记录的序号将是2,保持序号的连续性,后面的记录依然依次递增。SQL语句如下: ```sql select ...
ROW_NUMBER、RANK、DENSE_RANK 和 NTILE 排名函数 MS SQL 2005 中的排名函数包括 ROW_NUMBER、RANK、DENSE_RANK 和 NTILE,这四个函数可以有效地分析数据并提供排序值。下面将详细介绍每个函数的用法和示例。 一、...
总结来说,ROW_NUMBER()是按顺序分配唯一的序号,RANK()和DENSE_RANK()处理相同值时有不同的排名策略,RANK()会跳跃,DENSE_RANK()保持连续,而NTILE()则用于将数据分组到固定数量的分区。理解并熟练运用这些函数,...
SQL Server 2005 排名函数比较 ...row_number 函数可以用于实现查询表中指定范围的记录或实现分页功能,rank 函数和 dense_rank 函数用于考虑排序字段值相同的情况,ntile 函数用于将查询结果分为多个组。
博客文章地址:http://blog.csdn.net/pfe_nova/article/details/41357435 SQL2005之后添加的几个排名函数以及透析与反透析关键字,主要有Row_Number、RANK、DENSE_RANK、NTILE函数,pivot以及unpivot关键字
本文将介绍 Hive 中的四个序列函数:NTILE、ROW_NUMBER、RANK 和 DENSE_RANK。 首先,让我们了解什么是序列函数。序列函数是 Hive 中的一种特殊函数,用于对数据进行排序和编号。序列函数可以将数据分组并对每组...
分析函数2(Rank, Dense_rank, row_number);分析函数3(Top/Bottom N、First/Last、NTile);窗口函数;报表函数;分析函数总结;26个分析函数;PLSQL开发笔记和小结;分析函数简述 ROW_NUMBER () OVER([partition_clause]...
ROW_NUMBER可以为每个行提供唯一的序列号,RANK和DENSE_RANK则在处理排名和并列时提供不同的策略,而NTILE则能实现动态分组,非常适合进行分段统计或分区处理。在SQL Server 2005之后的版本中,这些函数仍然被广泛...
SQL Server 2005引入了四个排名函数,分别是`row_number`, `rank`, `dense_rank`, 和 `ntile`。这些函数帮助我们为查询结果集中的每一行赋予一个唯一的或基于特定条件的顺序编号。 1. `row_number()` `row_number...
DENSE_RANK 函数用于计算行的相对排序,相同的值具有一样的序数。 3.8 FIRST_VALUE 函数 FIRST_VALUE 函数用于获取一个组的第一个值。 3.9 LAG 函数 LAG 函数用于访问之前的行。 3.10 LAST_VALUE 函数 LAST_...
例如,你可以用ROW_NUMBER()和NTILE()来实现数据的分桶或分区,然后用RANK()或DENSE_RANK()来确定每个桶内的排名。CUME_DIST()和PERCENT_RANK()则有助于理解数据的分布特性,对于数据分析和报告非常有价值。 总的来...
此外,Hive 还支持其他开窗函数,如 LEAD()(获取后一行的值)、PERCENT_RANK()(计算百分位排名)和 NTILE()(将数据分为若干个桶或组)。熟练掌握这些函数对于提升 Hive 查询的灵活性和实用性至关重要。
在SQL Server中,数据库操作和数据分析常常涉及到对数据的排序和排名,这正是`ROW_NUMBER()`,`RANK()`,`DENSE_RANK()`以及`NTILE()`等排名函数的用武之地。这些函数可以帮助我们更好地理解和处理数据集,特别是在...
通过以上介绍可以看出,`ROW_NUMBER()`、`RANK()`、`DENSE_RANK()` 和 `NTILE()` 这四个行号排序函数在实现分页查询、排名统计等方面有着重要的应用价值。合理地使用这些函数,不仅可以简化查询语句,还能提高查询...
- 排序(ORDER BY):在每个分区内定义行的顺序,这对于RANK, DENSE_RANK, ROW_NUMBER等排名函数至关重要。 3. **分析函数实例** - **RANK, DENSE_RANK, ROW_NUMBER**:这三个函数都用于为每行分配一个唯一的排名...
- 排序函数:`RANK()`, `DENSE_RANK()`, `ROW_NUMBER()`,用于为数据行分配唯一的排名。 - 分组函数:如`NTILE()`,将数据行分成等大小或不等大小的组。 - 首尾函数:`FIRST_VALUE()`, `LAST_VALUE()`,返回指定...
ROW_NUMBER()函数为每一行分配一个唯一的整数,通常用于排序后的结果集。这个数字从1开始递增,对于每个新的分组或排序顺序,数字会重新开始。例如,以下SQL语句将返回每个部门员工的编号: ```sql SELECT ...