Database/MySQL

[MySQL] 데이터 정렬 & 순위 매기기 - ORDER BY / RANK() / DENSE_RANK() / ROW_NUMBER()

루루23 2024. 10. 10. 13:34
반응형

[[MySQL] 데이터 생성, 읽기, 수정, 삭제 - INSERT / SELECT / UPDATE / DELETE

먼저 사용할 테이블은 이러합니다.CREATE TABLE myhero ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(20), class INT NOT NULL, intelligence INT, strength INT, speed INT, durability INT, power INT, tier CHAR(5), PRIMARY KEY(id)); 데이

newj23.tistory.com](https://newj23.tistory.com/10)

여기서 만들었던 myhero 테이블을 그대로 이용해 볼게요 😌

ORDER BY

Syntax

SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ... ASC|DESC;

 

- 예시 : tier가 '0+'인 값들을 durability 내림차순으로 정렬

SELECT id, name, durability FROM myhero WHERE tier = '0+' ORDER BY durability DESC;

 

- SELECT절에서 가져온 컬럼의 컬럼 번호로 정렬 가능

SELECT id, name, durability FROM myhero WHERE tier = '0+' ORDER BY 3 DESC; -- 위와 같은 결과

 

 

 

순위 함수

기본 특징

  • OVER()와 함께 사용
  • ORDER BY 절을 기준으로 순위를 지정

 

Syntax

SELECT column, RANK() OVER (ORDER BY column) FROM table_name;
  1. RANK() : 동일한 값이 있는 경우 동일 순위 할당하고 다음 순위 건너뜀.
  2. DENSE_RANK() : RANK()와 동일하지만 다음 순위 건너뛰지 않음.
  3. ROW_NUMBER() : 동일한 값 신경쓰지 않음. 차례대로 행 번호를 붙이는 것과 같은 역할.
SELECT name,
RANK() OVER (ORDER BY intelligence DESC) _rank, 
DENSE_RANK() over(ORDER BY intelligence DESC) _dense_rank,
ROW_NUMBER() over(ORDER BY intelligence DESC) _row_number
FROM myhero;

 

반응형