首页 > 试题广场 >

升序降序排名II

[编程题]升序降序排名II
  • 热度指数:62 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

表: 成绩表

+------+-----+
| 字段名称 | 类型  |
+------+-----+
| 学号   | int |
| 成绩   | int |
+------+-----+

学号 是该表的主键。
该表的每一行表示 一个学生的成绩,包含学生的学号和成绩。

 

编写一个 SQL 查询,得出学生的升序降序排名。

查询结果如下例所示。

 

示例 1:

输入: 表:成绩表
+----+----+
| 学号 | 成绩 |
+----+----+
| 1  | 80 |
| 2  | 75 |
| 3  | 88 |
| 4  | 76 |
| 5  | 91 |
| 6  | 99 |
+----+----+ 输出: +----+----+--------+--------+
| 学号 | 成绩 | 成绩升序排名 | 成绩降序排名 |
+----+----+--------+--------+
| 2  | 75 | 1      | 6      |
| 4  | 76 | 2      | 5      |
| 1  | 80 | 3      | 4      |
| 3  | 88 | 4      | 3      |
| 5  | 91 | 5      | 2      |
| 6  | 99 | 6      | 1      |
+----+----+--------+--------+ 解释: 使用排序窗口函数,按成绩进行升序(order by 成绩 asc)和降序(order by 成绩 desc)排序即可得出对应排名。
示例1

输入

CREATE TABLE 成绩表
(
学号 INT,
成绩 INT
);
INSERT INTO 成绩表 (学号, 成绩) VALUES (1, 80);
INSERT INTO 成绩表 (学号, 成绩) VALUES (2, 75);
INSERT INTO 成绩表 (学号, 成绩) VALUES (3, 88);
INSERT INTO 成绩表 (学号, 成绩) VALUES (4, 76);
INSERT INTO 成绩表 (学号, 成绩) VALUES (5, 91);
INSERT INTO 成绩表 (学号, 成绩) VALUES (6, 99);

输出

学号|成绩|成绩升序排名|成绩降序排名
6|99|6|1
5|91|5|2
3|88|4|3
1|80|3|4
4|76|2|5
2|75|1|6
select 
学号
,成绩
,rank() over(order by 成绩) as 成绩升序排名
,rank() over(order by 成绩 desc) as 成绩降序排名
from 成绩表

发表于 2025-11-12 15:04:12 回复(0)