首页 > 试题广场 >

刷题通过的题目排名

[编程题]刷题通过的题目排名
  • 热度指数:117964 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
在牛客刷题有一个通过题目个数的(passing_number)表,id是主键,简化如下:
id number
1 4
2 3
3 3
4 2
5 5
6 4
第1行表示id为1的用户通过了4个题目;
.....
第6行表示id为6的用户通过了4个题目;
请你根据上表,输出通过的题目的排名,通过题目个数相同的,排名相同,此时按照id升序排列,数据如下:
id number t_rank
5 5 1
1 4 2
6 4 2
2 3 3
3 3 3
4 2 4

id为5的用户通过了5个排名第1,id为1和id为6的都通过了4个,并列第2。
示例1

输入

drop table if exists passing_number;
CREATE TABLE `passing_number` (
`id` int(4) NOT NULL,
`number` int(4) NOT NULL,
PRIMARY KEY (`id`));

INSERT INTO passing_number VALUES
(1,4),
(2,3),
(3,3),
(4,2),
(6,4),
(5,5);

输出

5|5|1
1|4|2
6|4|2
2|3|3
3|3|3
4|2|4
头像 牛客题解官
发表于 2025-03-18 13:43:29
精华题解 这道题目要求我们对用户通过的题目数量进行排名。我们要做的事情如下: 1. 确定总体问题 我们需要根据每个用户通过的题目数量进行降序排名,并且对于通过题目数量相同的用户,给予相同的排名。最后,结果需要按照排名升序排列,如果排名相同,则按用户ID升序排列。 2. 分析关键问题 计算排名:使用DENSE 展开全文
头像 SunburstRun
发表于 2020-08-13 17:48:12
方法一.首先要通过题目降序,id升序,那么sql应该为: select a.id,a.number   from passing_number a order by a.number desc,  展开全文
头像 qstalking
发表于 2021-01-25 16:17:29
口诀: row_number 不存在并列 dense_rank 和rank存在并列,但rank很跳。 口诀的意思是: row_number:不考虑并列的情况,哪怕分数相同,排名都是一溜下来的自然数。 dense_rank和rank 考虑并列的情况,区别在于rank很 展开全文
头像 焕熊
发表于 2021-02-25 15:11:34
有两种解题方法 方法一:dense_rank()函数 row_number()对应唯一排序:1、2、3、4 dense_rank()对应相同次序可重复,但不跳过下一个次序值:1、2、2、3 rank()对应相同次序可重复,并且跳过下一个次序值:1、2、2、4 select id, number, 展开全文
头像 Dateron
发表于 2021-07-23 14:41:38
此题目考察窗口函数三种排名函数的区别1.rank(),按值排序,值相等时不会重复;2.row_number(),按值排序,值相等时会重复,会产生空位;3.dense_rank(),按值排序,值相等时会重复,不会产生空位;根据题目要求,选择 dense_rank() select * ,d 展开全文
头像 高质量搬砖人
发表于 2021-02-01 09:44:38
方法)窗口函数 通过题目个数相同的,排名相同 id升序排列 SELECT id, number, dense_rank()over(ORDER BY number DESC)AS  展开全文
头像 xiaohuanxiong
发表于 2021-08-28 02:03:22
mysql8.0窗口函数解法: select id, number, dense_rank() over (order by number desc) as t_rank from passing_number order by number desc,id a 展开全文
头像 阿蘭
发表于 2021-12-05 15:21:34
1. RANK():跳跃排序(序号可能重复)。 排序字段值相同的序号相同。例如3条记录中前2条排序字段值相同,第3条不同,则前3条记录的排序号为1,1,3。 语法: RANK() OVER ( PARTITION BY <expression>[{,<expression& 展开全文
头像 牛客593719959号
发表于 2021-09-07 18:48:05
sql script select id,number,dense_rank() over(order by number desc) as t_rank from passing_number;
头像 夜的第九章
发表于 2021-09-13 13:49:54
1.分析 count计数的时候要去重,两个排序。 2.代码 select p1.id ,p1.number, (select count(distinct p2.number) from passing_number as p2 where p2.number >= p1.number) 展开全文
头像 jiang_dr
发表于 2021-10-29 10:33:42
思路:我们根据题目给出的信息,就可以得知,我们需要自己构建一列用来对通过题目的数量大小进行排序,很容易就想到我们需要在 SELECT 上做文章 那么我们首先进行一个普通的查询,即 SELECT * FROM passing_number ORDER BY number 然后我们根据主查询提供的 n 展开全文