博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode-178:分数排名
阅读量:4984 次
发布时间:2019-06-12

本文共 1587 字,大约阅读时间需要 5 分钟。

题目描述:

编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。

+----+-------+| Id | Score |+----+-------+| 1  | 3.50  || 2  | 3.65  || 3  | 4.00  || 4  | 3.85  || 5  | 4.00  || 6  | 3.65  |+----+-------+

例如,根据上述给定的 Scores 表,你的查询应该返回(按分数从高到低排列):

+-------+------+| Score | Rank |+-------+------+| 4.00  | 1    || 4.00  | 1    || 3.85  | 2    || 3.65  | 3    || 3.65  | 3    || 3.50  | 4    |+-------+------+

SQL架构:

Create table If Not Exists Scores (Id int, Score DECIMAL(3,2));Truncate table Scores;insert into Scores (Id, Score) values ('1', '3.5');insert into Scores (Id, Score) values ('2', '3.65');insert into Scores (Id, Score) values ('3', '4.0');insert into Scores (Id, Score) values ('4', '3.85');insert into Scores (Id, Score) values ('5', '4.0');insert into Scores (Id, Score) values ('6', '3.65');

解题思路:

  oracle可以使用排名函数进行排名,因为名次之间不应该有“间隔”,所以要使用dense_rank()函数,这个函数排的名次是连续的,rank()函数会跳过(并列排名),mysql依然是使用自定义变量来进行排名。

解题方案:

  oracle

select round(a.score,2) as score, b.rank  from Scores a  join (select a.*, rownum as rank          from (select distinct a.score from Scores a order by a.score desc) a) b    on a.score = b.score order by b.rank

  mysql

SELECT    ROUND(a.score, 2) AS score,    b.rankFROM    Scores aJOIN (    SELECT        a.*, (@rowNum :=@rowNum + 1) AS rank    FROM        (            SELECT DISTINCT                a.score            FROM                Scores a        ) a,        (SELECT(@rowNum := 0)) b    ORDER BY        a.score DESC) b ON a.score = b.scoreORDER BY    b.rank

 

转载于:https://www.cnblogs.com/zouqf/p/10283410.html

你可能感兴趣的文章
jmeter体系结构
查看>>
python基础知识练习题(一)
查看>>
ThinkPHP 5.0/5.1 自定义404界面的配置
查看>>
[转]忍无可忍 献上一曲维族歌曲 《我们的客户是花园》(吐槽)
查看>>
Nginx Windows版的服务安装和管理工具
查看>>
ActiveMQ 概述
查看>>
SpringBoot结合dataTables(Ajax,分页,新增列)
查看>>
Linux 工具集
查看>>
Python面试笔记一
查看>>
符号修饰与函数签名、extern “C”(转载)
查看>>
JDK10 新特性
查看>>
css初级之属性选择器
查看>>
CentOS 查看进程状态
查看>>
tf.transpose()
查看>>
xgboost防止过拟合
查看>>
序列化模块
查看>>
周进度报告5
查看>>
测开之路十九:实现栈
查看>>
js提高篇
查看>>
《深入浅出wpf》第一章
查看>>