MySQL-COUNT实现排名

简介

目标:对分数进行排名;

如果两个分数相同,则两个分数排名(Rank)相同。
情况一:平分后的下一个名次是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。例:1、1、2、3、4、4。
情况二:排名是非连续的。例:1、1、1、4、4、6。

COUNT

COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入);
可以用COUNT()函数对成绩大于某个值的数目进行统计

建表插值脚本

-- 导出 t1 的数据库结构
DROP DATABASE IF EXISTS `t1`;
CREATE DATABASE IF NOT EXISTS `t1` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `t1`;

-- 导出  表 t1.score 结构
DROP TABLE IF EXISTS `score`;
CREATE TABLE IF NOT EXISTS `score` (
  `Id` int(11) NOT NULL,
  `Score` float DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 正在导出表  t1.score 的数据:~6 rows (大约)
DELETE FROM `score`;
/*!40000 ALTER TABLE `score` DISABLE KEYS */;
INSERT INTO `score` (`Id`, `Score`) VALUES
	(1, 3.52),
	(2, 3.65),
	(3, 4.23),
	(4, 3.85),
	(5, 4.23),
	(6, 3.65);
-- --------------------------------------------------------
-- 服务器版本:                        10.3.17-MariaDB-log - MariaDB Server
-- 服务器操作系统:                      Linux
-- HeidiSQL 版本:                  11.0.0.5958
-- --------------------------------------------------------	

情况一

平分后的下一个名次是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。例:1、1、2、3、4、4。

SELECT Score,(SELECT COUNT(DISTINCT Score) FROM score WHERE score>=s.score) AS Rank 
FROM score s 
ORDER BY score DESC;

“4.23” “1”
“4.23” “1”
“3.85” “2”
“3.65” “3”
“3.65” “3”
“3.52” “4”

情况二

排名是非连续的。例:1、1、1、4、4、6。

SELECT Score,(SELECT COUNT(Score)+1 FROM score WHERE score>s.score) AS Rank 
FROM score s 
ORDER BY score DESC;

“4.23” “1”
“4.23” “1”
“3.85” “3”
“3.65” “4”
“3.65” “4”
“3.52” “6”

参考

https://www.w3school.com.cn/sql/sql_func_count.asp
https://www.educoder.net/tasks/823fiz4rve9s

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值