가져온 데이터를 정렬해주는 키워드
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;
SELECT number, name
FROM mypokemon # 테이블 사용(USE) 명시했다고 가정
WHERE 조건식
ORDER BY number DESC;
SELECT number, name, attack, defense
FROM mypokemon # 테이블 사용(USE) 명시했다고 가정
WHERE 조건식
ORDER BY attack DESC, defense; # attack의 값이 같을 경우, defense는 오름차순으로 정렬된다.
컬럼 번호로 정렬이 가능하다.
SELECT number, name, attack, defense
FROM mypokemon # 테이블 사용(USE) 명시했다고 가정
WHERE 조건식
ORDER BY attack 3 DESC, 4; # 예제2와 같은 쿼리이다.
데이터를 정렬해 순위를 만들어주는 함수
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 조건식
SELECT name, attack, RANK() OVER (ORDER BY attack DESC) AS attack_rank
FROM pokemon.mypokemon
name | attack | attack_rank |
---|---|---|
raichu | 90 | 1 |
pikachu | 55 | 2 |
eevee | 55 | 2 |
chikorita | 49 | 4 |
caterpie | 30 | 5 |
RANK와 유사한 함수에는 DENSE_RANK
와 ROW_NUMBER
가 있다.
RANK
: 공동 순위가 있으면 다음 순서로 건너뜀DENSE_RANK
: 공동 순위가 있어도 다음 순위를 건너뛰지 않음ROW_NUMBER
: 공동 순위를 무시 (단순히 row의 순서를 나타냄)