首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得排级?

如何获得排级?
EN

Stack Overflow用户
提问于 2011-03-18 02:55:14
回答 6查看 13.2K关注 0票数 8

嗨,

我实际上发布了类似的(还是相同的?)昨天的问题,但我认为我需要张贴一个新的问题,因为我有简短,但明确的问题。

我有下表。

代码语言:javascript
复制
id  point
1   30
2   30
3   29
4   27
5   28
6   26

我想要的:

  1. 让所有的用户按等级排序。用户1和2应该有1作为它们的等级值,因为它们都有30分。
  2. 我想按用户id查询一个级别。当我查询用户#1和#2时,我喜欢得到1作为我的排名的结果,因为两者都有30分。

添加:3/18

我尝试了Logan的查询,但是得到了以下结果

代码语言:javascript
复制
id point   rank
1   30  1
2   30  1
3   29  3
4   27  5
5   28  4
6   26  6
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-03-18 03:36:13

您所推荐的子查询方法将进行二次缩放。http://www.xaprb.com/blog/2006/12/02/how-to-number-rows-in-mysql/展示了一种使用用户变量的更有效的方法。下面是一个未经测试的适应您的问题的方法:

代码语言:javascript
复制
@points := -1; // Should be an impossible value.
@num := 0;

SELECT id
  , points
  , @num := if(@points = points, @num, @num + 1) as point_rank
  , @points := points as dummy
FROM `users`
ORDER BY points desc, id asc;
票数 5
EN

Stack Overflow用户

发布于 2011-03-18 03:02:51

数一下有多少人比他们有更多的分数。

代码语言:javascript
复制
select count(1) from users 
where point > (select point from users where id = 2) group by point

这将给出为给定用户提供更多积分的人数。因此,对于用户1和用户2,结果将是0(0),这意味着它们是第一位的。

票数 5
EN

Stack Overflow用户

发布于 2011-03-18 03:18:29

当我需要做类似的事情时,我创建了一个视图,如下所示:

代码语言:javascript
复制
CREATE VIEW rankings_view 
AS 
SELECT id
,      point
,      (select count(1) 
          from points b
         where  b.point > a.point) +1 as rank
FROM points as a;

这显然是假定原始表被命名为points。然后,通过查询视图,您可以获得任意id的级别,或与任何级别对应的id。

编辑

如果要计算每个点值之上的不同点值的数目,而不是当前点值以上的点值的条目数,则可以执行以下操作:

代码语言:javascript
复制
CREATE VIEW rankings_view2
AS 
SELECT id
,      point
,      (SELECT COUNT(1) +1 AS rank 
          FROM ( SELECT DISTINCT point
                   FROM points b
                  WHERE   b.point >a.point ))
FROM points AS a;

备注

提出的其他一些解决方案的性能肯定优于这个解决方案。它们是mysql特有的,所以我不能真正地将它们用于我正在做的事情。我的应用程序最多有128个实体要排名,所以这对我来说已经足够好了。但是,如果您可能有大量的行,那么您可能需要考虑使用这里介绍的其他解决方案之一,或者限制排名的范围。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5347565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档