복붙노트

[SQL] MySQL은, 사용자로 순위를 잡아

SQL

MySQL은, 사용자로 순위를 잡아

나는 다음과 같은 MySQL의 테이블이 있습니다 :

id     name     points
1      john     4635
3      tom      7364
4      bob      234
6      harry    9857

나는 기본적으로 모든 사용자를 선택하지 않고 개별 사용자 순위 싶어. 난 단지 ID로 하나의 사용자를 선택하고 그들이 가지고있는 점의 수에 의해 결정되는 사용자의 순위를 얻으려면.

예를 들어, ID 3으로 순위 2 선택에 다시 톰를 얻을.

건배

EEF

해결법

  1. ==============================

    1.

    SELECT  uo.*, 
            (
            SELECT  COUNT(*)
            FROM    users ui
            WHERE   (ui.points, ui.id) >= (uo.points, uo.id)
            ) AS rank
    FROM    users uo
    WHERE   id = @id
    

    DENSE_RANK :

    SELECT  uo.*, 
            (
            SELECT  COUNT(DISTINCT ui.points)
            FROM    users ui
            WHERE   ui.points >= uo.points
            ) AS rank
    FROM    users uo
    WHERE   id = @id
    
  2. ==============================

    2.@Quassnoi에 의한 해결은 관계의 경우에 실패합니다. 다음은 관계의 경우에 작동합니다 솔루션입니다 :

    @Quassnoi에 의한 해결은 관계의 경우에 실패합니다. 다음은 관계의 경우에 작동합니다 솔루션입니다 :

    SELECT *,
    IF (@score=ui.points, @rank:=@rank, @rank:=@rank+1) rank,
    @score:=ui.points score
    FROM users ui,
    (SELECT @score:=0, @rank:=0) r
    ORDER BY points DESC
    
  3. ==============================

    3.

     SET @rownum := 0;
     SELECT rank, score FROM ( SELECT @rownum := @rownum +1 AS rank, `score` ,`user_id`
     FROM leaderboard 
     ORDER BY  `score` DESC , `updated_timestamp` ) as result WHERE `user_id`=$user_id
     LIMIT 1
    
  4. from https://stackoverflow.com/questions/1293817/mysql-get-users-rank by cc-by-sa and MIT license