MySQL使用SQL实现Oracle Rank函数功能

需求:按照用户的积分对用户进行排名。

事例表结构

CREATE TABLE `users_points` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
  `score` int(11) NOT NULL COMMENT '分数',
  `score_rank` int(11) NOT NULL COMMENT '分数排名',
  `created_at` datetime NOT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

依据score字段,对user_id进行排名,MySQL可以使用一条SQL实现

select a.user_id, a.score, (select count(distinct b.score) from users_points b where b.score >= a.score) as rank from users_points a order by score desc;

得出的结果

+----+-------+------+
| user_id | score | rank |
+----+-------+------+
| 11 |   100 |    1 |
|  8 |    80 |    2 |
|  4 |    50 |    3 |
| 12 |    45 |    4 |
|  2 |    40 |    5 |
|  6 |    30 |    6 |
|  1 |    20 |    7 |
| 10 |    15 |    8 |
|  7 |    10 |    9 |
|  5 |    10 |    9 |
|  3 |    10 |    9 |
|  9 |     5 |   10 |
+----+-------+------+
时间: 2024-08-04 13:20:52

MySQL使用SQL实现Oracle Rank函数功能的相关文章

php实现excel中rank函数功能的方法_php技巧

本文实例讲述了php实现excel中rank函数功能的方法.分享给大家供大家参考.具体分析如下: sql语句实现排名是像这样的如: 总分成绩为 195,180,180,161,名次分别为1,2,3,4,遇到并列的情况也是按照顺序的, 而Excel函数rank排名得到的结果是1,2,2,4,遇到并列跳过中间的3 下面的函数模拟的就是这种情况 函数如下(不知道有没有更好的实现方法): 公式为: 名次=总人数--比自己小的数的个数-这个分数重复次数+1(加上自己) 得到名次的数组再根据对应的id写入到

oracle10错误-求助 mysql的sql到oracle怎么变动

问题描述 求助 mysql的sql到oracle怎么变动 mysql的sql语法: SUBDATE(TSUM.SUM_TIME, DATE_FORMAT(TSUM.SUM_TIME, '%w') - 1), SUBDATE(TSUM.SUM_TIME, DATE_FORMAT(TSUM.SUM_TIME, '%w') - 7), 结果:得到当前一周的星期一和星期日,其它星期二.三...六不要. 怎么改成oracle的SQL呢?谢谢 解决方案 select next_day(sysdate,'星期

JSP连接MySql/MS SQL Server/Oracle数据库连接方法[整理]_JSP编程

JSP连接MySql数据库方法 首先先将MySql的数据库连接驱动拷贝到Tomcat/common/lib包下 下载mysql-connector-java-5.1.6.zip http://mysql.cs.pu.edu.tw/Downloads/Connector-J/mysql-connector-java-5.1.6.zip 配置Tomcat的虚拟目录-略 创建jdbcMySql.jsp页面 页面代码如下: 复制代码 代码如下: <%@ page contentType="text

Oracle DECODE函数语法使用介绍_oracle

Oracle DECODE函数功能很强,下面就为您详细介绍Oracle DECODE函数的用法,希望可以让您对Oracle DECODE函数有更多的了解. Oracle DECODE函数 Oracle DECODE函数是Oracle公司独家提供的功能,它是一个功能很强的函数.它虽然不是SQL的标准,但对于性能非常有用.到目前,其他的数据库供应商还不能提供类似DECODE的功能,甚至有的数据库的供应商批评Oracle的SQL不标准.实际上,这种批评有些片面或不够水平.就象有些马车制造商抱怨亨利.福

从运维的角度分析使用阿里云数据库RDS的必要性--你不应该在阿里云上使用自建的MySQL/SQL Server/Oracle/PostgreSQL数据库

开宗明义,你不应该在阿里云上使用自建的MySQL or SQL Server数据库,对了,还有Oracle or PostgreSQL数据库. 云数据库 RDS(Relational Database Service)是一种稳定可靠.可弹性伸缩的在线数据库服务.基于飞天分布式系统和全SSD盘高性能存储,支持MySQL.SQL Server.PostgreSQL和PPAS(高度兼容Oracle)引擎,默认部署主备架构且提供了容灾.备份.恢复.监控.迁移等方面的全套解决方案. 当然,并不是指所有用户

oracle自定义函数如何转成mysql函数

问题描述 oracle自定义函数如何转成mysql函数 这是oracle自定义的函数,怎么把他转成mysql的 create or replace function fun_return_zjxl(in_taskId varchar2, in_work_no varchar2) return varchar2 is v_sum number(10);--质检平均完成量 v_num NUMBER(10);--质检个人完成量 v_qualitied_cnt NUMBER(10); v_result

sql isnull (Oracle,mysql,mssql)

sql isnull (oracle,mysql教程,mssql) isnull 使用指定的替换值替换 null. 语法 isnull ( check_expression , replacement_value ) 参数 check_expression 将被检查是否为 null的表达式.check_expression 可以是任何类型的. replacement_value 在 check_expression 为 null时将返回的表达式.replacement_value 必须与 che

SQL Server实现split函数分割字符串功能及用法示例_MsSql

本文实例讲述了SQL Server实现split函数分割字符串功能及用法.分享给大家供大家参考,具体如下: /* 函数名称:f_SplitToNvarchar 作用:实现split功能的函数 更新记录: 设计思路:将nvarchar类型字符结合的一个串,分隔到一张只有一列nvarchar类型的表里 */ CREATE FUNCTION [dbo].[f_SplitToNvarchar] ( @SourceSql NVARCHAR(MAX),--源分隔字符串 @StrSeprate VARCHAR

Oracle排名函数(Rank)实例详解_oracle

--已知:两种排名方式(分区和不分区):使用和不使用partition --两种计算方式(连续,不连续),对应函数:dense_rank,rank ·查询原始数据:学号,姓名,科目名,成绩 select * from t_score S_ID S_NAME SUB_NAME SCORE 1 张三 语文 80.00 2 李四 数学 80.00 1 张三 数学 0.00 2 李四 语文 50.00 3 张三丰 语文 10.00 3 张三丰 数学 3 张三丰 体育 120.00 4 杨过 JAVA 9