SQL 쿼리로 조회한 결과 테이블 앞에 랭킹이나 숫자를 쭉 붙이고 싶으신적 있으신가요?
MySQL을 이용하신다면 RANK나 ROW_NUMBER 함수로 붙일 수 있어요.
두 함수는 큰 틀에서 비슷하지만 "동일한 값"에 대해 처리하는 방식이 다릅니다.
RANK는 동일한 값에 동일한 순서를 부여하고,
ROW_NUMBER는 동일한 값이어도 고유한 순서를 부여합니다.
RANK 함수
SELECT *, RANK() OVER(ORDER BY number DESC) AS 'rank'
FROM test
ORDER BY number DESC limit 10
ROW_NUMBER 함수
SELECT *, ROW_NUMBER() OVER(ORDER BY number DESC) AS 'rank'
FROM test
ORDER BY number DESC limit 10
RANK와 ROW_NUMBER의 차이
셀렉트 어드민 사용 예시
참고: 기본적으로 SELECT절의 순서대로 데이터가 보여지는데,
전체값( *
)을 가져오면서, 랭킹 컬럼을 추가하고 싶으시다면 columns.prepend
기능을 사용하시면 됩니다.
pages:
- path: row_number
blocks:
- type: query
resource: mysql.qa
sqlType: select
sql: >
SELECT *, ROW_NUMBER() OVER(ORDER BY number DESC) AS 'rank'
FROM test
ORDER BY number DESC limit 10
columns:
rank:
prepend: true # rank 컬럼을 가장 앞(prepend)에 붙임.
- type: query
resource: mysql.qa
sqlType: select
sql: >
SELECT *, RANK() OVER(ORDER BY number DESC) AS 'rank'
FROM test
ORDER BY number DESC limit 10
columns:
rank:
prepend: true
관련하여 궁금하신 점은 자유롭게 코멘트 남겨주세요.