本文共 913 字,大约阅读时间需要 3 分钟。
需求:按照用户的积分对用户进行排名。
事例表结构
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 |+----+-------+------+
转载地址:http://afbbm.baihongyu.com/