Database/MySQL
[MariaDB] 랭크 순위 함수 대체하기 (10.1 이하 버전)
idealist
2023. 2. 14. 11:03
MariaDB 10.2 이상 버전은 RANK() 함수를 이용할 수 있습니다. 버전은 select version() 으로 확인
10.1 이하 버전에서 랭크 함수 대체법
SELECT a.*,
(case @chk when a.userId then @rownum:=@rownum+1 ELSE @rownum:=1 END) rank,
(@chk:=a.userId) chk
FROM test a, (SELECT @chk:='' ,@rownum:=0 FROM DUAL) b
WHERE DATE_FORMAT(a.datetime,'%Y%m%d') BETWEEN 20230101 AND 20230331
GROUP BY date,userId,datetime
ORDER BY date,userId,datetime
- chk는 순위를 매길 때 필요한 변수입니다. 어떤 컬럼을 기준으로 순위를 매길지 정한 후 chk로 지정해줍니다.
- RANK()함수에서 PARTITION BY와 같은 기능을 하는 것이 GROUP BY입니다.
- GROUP BY를 통해 여러 기준이 되는 컬럼을 정하여 순위를 매길 수 있습니다.
- SELECT 후 chk를 보면 chk의 데이터가 바뀔 때 마다 rank가 다시 매겨지는 것을 확인 할 수 있습니다.
이상입니다! 궁금한 점 있으시면 댓글 달아주세요!
참고