88DAY / MySQL 랭크함수

2017. 8. 8. 09:00

Oracle과 달리 MySQL에서는 랭크함수가 없어서 구현해줘야한다.


같은 점수면 동점처리하고

원래는 1등 1명, 2등 2명이면, 다음 등수는 4등이 되어야하지만

우리 프로젝트에서 처리하기엔 더 불편할 것같아서 다음 등수는 3등이 되게하였다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    SELECT 
        sns_board_no, 
        CASE
        WHEN @prev = liker then @Rank 
        WHEN @prev := liker then @Rank := @Rank +1 
        END AS rank, 
        liker
    FROM 
        (
        SELECT sns_board_no ,count(sns_like_no) as liker
        FROM sns_like
        WHERE MONTH(sns_like_date) = (MONTH(NOW())-1)
        GROUP BY sns_board_no 
        ORDER BY count(sns_like_no) DESC
        )sub1
    CROSS JOIN (select @Rank := 0 ,@prev :=  NULL) sub2
    ;
cs



MySQL 사용자 변수 사용


1)SET을 사용하여 변수설정


1
SET @exam = 1;
cs

2)@var := expr

1
SELECT @exam := 1;
cs




+ Recent posts