首页 > 试题广场 >

连续出现N 次问题【举一反三】

[编程题]连续出现N 次问题【举一反三】
  • 热度指数:94 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

表: 成绩表

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


该表的每一行表示一位学生的成绩

 

需要查找所有连续出现 3 次的成绩。

查询结果如下例所示。

 

示例 1:

输入: 表:成绩表
+---------+--------+
| 学生编号 | 分数   |
+---------+--------+
|0001     | 89     |
|0002     | 76     |
|0003     | 76     |
|0004     | 84     |
|0005     | 84     |
|0006     | 84     |
|0007     | 76     |
|0008     | 91     |
|0009     | 88     |
|0010     | 86     |
+---------+--------+ 输出: +---------+
| 成绩    |
+---------+
| 84      |
+---------+ 解释: 根据学号排序,84分连续出现3次
示例1

输入

CREATE TABLE 成绩表
(
    `学号`   VARCHAR(512),
    `分数`   INT
);
INSERT INTO 成绩表 (`学号`, `分数`) VALUES 
('0001', 89),
('0002', 76),
('0003', 76),
('0004', 84),
('0005', 84),
('0006', 84),
('0007', 76),
('0008', 91),
('0009', 88),
('0010', 86);

输出

分数
84
select distinct 成绩 as 分数
from
(select
分数 as 成绩
,(rk-rw) as diff
from
(select
学号
,分数
,row_number() over(order by 学号) as rk
,row_number() over(partition by 分数 order by 学号) as rw
from 成绩表) e) r
group by 成绩,diff
having count(*)=3
发表于 2025-11-12 15:50:38 回复(0)