版权声明:本文为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;