SQL 쿼리 조회결과에 랭크(rank)나 행숫자(row_number)를 넣을 수 있어요

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

관련하여 궁금하신 점은 자유롭게 코멘트 남겨주세요.

1개의 좋아요