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 |