[TIL] #7 (2022.01.26)

어느 개발자·2022년 1월 26일
0

TIL

목록 보기
7/15
post-thumbnail

ORDER BY

가져온 데이터를 정렬해주는 키워드

  • ORDER BY [컬럼 이름] 형식으로 사용한다.
  • 입력한 [컬럼 이름] 의 값을 기준으로 모든 row를 정렬한다.
  • 기본 정렬 규칙은 오름차순이다.
    ORDER BY [컬럼 이름] = ORDER BY [컬럼 이름] ASC
  • 내림차순 정렬 ORDER BY [컬럼 이름] DESC
  • 여러 컬럼 정렬도 가능하며, [컬럼 이름] 을 복수 개 입력한다.
    ORDER BY [컬럼 1], [컬럼 2] : [컬럼 1] 기준으로 정렬 -> [컬럼 1] 값이 동일한 row 간에 [컬럼 2] 기준으로 정렬

쿼리 문법

오름차순

SELECT [컬럼 이름]
FROM [테이블 이름]
WHERE 조건식
ORDER BY [컬럼 이름] ASC; # ASC는 생략 가능

내림차순

SELECT [컬럼 이름]
FROM [테이블 이름]
WHERE 조건식
ORDER BY [컬럼 이름] DESC;

예제

예제 1

SELECT number, name
FROM mypokemon # 테이블 사용(USE) 명시했다고 가정
WHERE 조건식
ORDER BY number DESC;

예제 2

SELECT number, name, attack, defense
FROM mypokemon # 테이블 사용(USE) 명시했다고 가정
WHERE 조건식
ORDER BY attack DESC, defense; # attack의 값이 같을 경우, defense는 오름차순으로 정렬된다.

예제 3

컬럼 번호로 정렬이 가능하다.

SELECT number, name, attack, defense
FROM mypokemon # 테이블 사용(USE) 명시했다고 가정
WHERE 조건식
ORDER BY attack 3 DESC, 4; # 예제2와 같은 쿼리이다.

RANK

데이터를 정렬해 순위를 만들어주는 함수

  • RANK() OVER (ORDER BY [컬럼 이름]) 형식으로 사용한다.
  • 항상 ORDER BY 와 함께 사용한다.
  • SELECT 절에 사용하며, 정렬된 순서에 순위를 붙인 새로운 컬럼을 보여준다.
    단, RANK테이블의 실제 데이터는 영향을 미치지 않는다.

쿼리 문법

꼭 기억하기

  • RANK 는 순위를 매겨주는 함수이지, 정렬을 해주는 함수가 아니다.
  • 실제 정렬은 ORDER BY 절에서 일어난다.

오름차순 순위 만들기

SELECT [컬럼 이름], ..., RANK() OVER (ORDER BY [컬럼 이름])
FROM [테이블 이름]
WHERE 조건식

내림차순 순위 만들기

SELECT [컬럼 이름], ..., RANK() OVER (ORDER BY [컬럼 이름] DESC)
FROM [테이블 이름]
WHERE 조건식

예제

예제 1

SELECT name, attack, RANK() OVER (ORDER BY attack DESC) AS attack_rank
FROM pokemon.mypokemon

결과

nameattackattack_rank
raichu901
pikachu552
eevee552
chikorita494
caterpie305

유사 함수들과 비교

RANK와 유사한 함수에는 DENSE_RANKROW_NUMBER 가 있다.

  • RANK : 공동 순위가 있으면 다음 순서로 건너뜀
  • DENSE_RANK : 공동 순위가 있어도 다음 순위를 건너뛰지 않음
  • ROW_NUMBER : 공동 순위를 무시 (단순히 row의 순서를 나타냄)

0개의 댓글