id | number |
1 | 4 |
2 | 3 |
3 | 3 |
4 | 2 |
5 | 5 |
6 | 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。
id | number |
1 | 4 |
2 | 3 |
3 | 3 |
4 | 2 |
5 | 5 |
6 | 4 |
id | number | t_rank |
5 | 5 | 1 |
1 | 4 | 2 |
6 | 4 | 2 |
2 | 3 | 3 |
3 | 3 | 3 |
4 | 2 | 4 |
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
elect *, dense_rank() over ( order by number desc ) t_rank from passing_number order by t_rank, id;
SELECT a.id, a.number, ( SELECT COUNT(DISTINCT b.number) FROM passing_number b WHERE a.number <= b.number ) t_rank FROM passing_number a ORDER BY t_rank ASC, a.id ASC;
select id, number, (select count(distinct p2.number) from passing_number p2 where p1.number <= p2.number ) as t_rank from passing_number p1 order by t_rank, id
子查询作为字段的用法,排名问题。
select *, dense_rank()over( order by number desc) t_rank from passing_number