Mysql手写Rank排名不用order by、MySQL查询第N大的元素

版权声明:本文为HCG原创文章,未经博主允许不得转载。请联系[email protected] https://blog.csdn.net/qq_39455116/article/details/87923035

//创建一个表,只要ID和分数

DROP TABLE IF EXISTS `sc`;
CREATE TABLE `sc` (
  `id` int(11) DEFAULT NULL,
  `score` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO `sc` VALUES ('1', '1');
INSERT INTO `sc` VALUES ('2', '3');
INSERT INTO `sc` VALUES ('3', '4');
INSERT INTO `sc` VALUES ('4', '4');
INSERT INTO `sc` VALUES ('5', '5');
INSERT INTO `sc` VALUES ('6', '6');

一、实现rank排名,分数大的在前面,分数相同排名相同

SELECT
	s2.id,
	s2.score,
	COUNT(*) myrank
FROM
	sc s2,
	(SELECT     score FROM sc) s3
WHERE
	s2.score <= s3.score

GROUP BY s2.id
结果:
1	1	6
2	3	5
3	4	4
4	4	4
5	5	2
6	6	1

查询第2大的元素(不考虑重复元素)

用limit做,最简单

select id, score 
from  sc 
order by score desc 
limit 1,1
select id,  max(score) ma
from sc
where score < (select max(score) from sc )  

查询第N大的元素

备注: limit N-1,1是查询第N个元素

 
 
SELECT
	s2.id,
	s2.score,
	COUNT(*) myrank
FROM
	sc s2,
	(SELECT     score FROM sc) s3
WHERE
	s2.score <= s3.score

GROUP BY s2.id
limit N-1,1;
 

 
 

猜你喜欢

转载自blog.csdn.net/qq_39455116/article/details/87923035