繁体   English   中英

如何使用mysql或java(jdbc)查找等级

[英]How to find rank using mysql or java(jdbc)

我已经尝试过此mysql代码以查找等级/位置。 它起作用了,我已经意识到,如果出现平局,它会给出相同的等级,但是此后它应该跳过下一个等级,例如如果三个人并列第二,那么下一个等级应该是5而不是3。我希望您能理解。

SET @RANK=0,@PREV=NULL;
SELECT RANK,total FROM
(
SELECT @RANK:=IF(@PREV=COMP,@RANK,@RANK+1) AS RANK,
@PREV:=COMP AS total,ADM
FROM my_table
ORDER BY total DESC
)
AS RESULT;

谁可以在这里帮助我,或者是否有人可以帮助我在java中开发一种返回等级的方法。 我会感激的

如果要用Java做到这一点,一种方法是获取排名并将其排序(根据排名的工作方式升序或降序)。 阅读排序后的数组将为您提供排名。

编辑:通过“给您排名”,我的意思是您现在可以轻松地通过数组分配排名。 从索引0开始,所有元素的等级为0(或其他),而元素的值未更改。 当值改变时,根据需要增加等级并以相同的方式继续。

您可以添加另一个始终递增的等级,如果COMP的值发生变化,则将当前等级设置为该等级。

SELECT Rank,total
FROM
(
    SELECT @Rank:=IF(@Prev=COMP, @Rank, @FullRank) AS Rank,
            ADM,
            @Prev:=COMP,
            COMP AS total,
            @FullRank:=@FullRank+1
    FROM my_table
    CROSS JOIN (SELECT @Rank:=0, @Prev:='fred', @FullRank:=1) Sub1
    ORDER BY total DESC
) RESULT

请注意,MySQL可以优化查询中用户变量的顺序,这有时会引起问题。 @Prev:= COMP AS总计作为一行(而不是像我在上面的查询中所做的那样,将其拆分为2个不同的选择项)似乎使第一级项目变得一团糟。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM