SQL ORDER BY와 LIMIT 정리 | 정렬하고 상위 N개 데이터 조회하기

SQL에서 조회 결과의 순서를 정하려면 ORDER BY를 사용하고, 필요한 개수만 가져오려면 LIMIT을 사용한다.

두 문법은 보통 함께 사용되며, 정렬한 뒤 상위 N개 데이터를 조회하는 패턴에서 자주 쓰인다.


ORDER BY란

ORDER BY는 조회 결과를 특정 컬럼 기준으로 정렬하는 문법이다.

select userid, amount
from buytbl
order by amount asc;

asc는 오름차순 정렬이다.

숫자는 작은 값부터, 문자는 사전순으로 정렬된다.

select userid, amount
from buytbl
order by amount desc;

desc는 내림차순 정렬이다.

숫자는 큰 값부터 조회된다.


ASC와 DESC 차이

정렬 방식 의미

ASC 오름차순
DESC 내림차순

asc는 기본값이라 생략할 수 있다.

select userid, amount
from buytbl
order by amount;

위 쿼리는 아래와 같다.

select userid, amount
from buytbl
order by amount asc;

집계 결과 정렬하기

ORDER BY는 일반 컬럼뿐 아니라 집계 결과에도 사용할 수 있다.

select userid, sum(amount) as `총 구매수량`
from buytbl
group by userid
order by `총 구매수량` desc;

이 쿼리는 사용자별 구매 수량을 합산한 뒤, 구매 수량이 많은 순서로 정렬한다.


별칭으로 정렬하기

SELECT에서 만든 별칭은 ORDER BY에서 사용할 수 있다.

select userid, sum(price * amount) as `총구매금액`
from buytbl
group by userid
order by `총구매금액` desc;

집계식이 길어질수록 별칭을 사용하는 편이 읽기 쉽다.


컬럼 번호로 정렬하기

정렬 기준은 컬럼 번호로도 지정할 수 있다.

select userid, sum(amount) as `총 구매수량`
from buytbl
group by userid
order by 2 desc;

여기서 2는 SELECT 결과의 두 번째 컬럼인 총 구매수량을 의미한다.

다만 컬럼 순서가 바뀌면 의미도 바뀌기 때문에, 실제 코드에서는 별칭으로 정렬하는 편이 더 명확하다.


LIMIT으로 개수 제한하기

LIMIT은 조회 결과에서 가져올 행 개수를 제한한다.

select userid, sum(amount) as `총 구매수량`
from buytbl
group by userid
order by `총 구매수량` desc
limit 3;

이 쿼리는 구매 수량이 많은 사용자 상위 3명을 조회한다.


ORDER BY와 LIMIT 실행 흐름

ORDER BY와 LIMIT을 같이 쓸 때는 순서가 중요하다.

먼저 정렬
그다음 개수 제한

즉, 아래 쿼리는 전체 데이터를 구매금액 기준으로 정렬한 뒤 상위 5개만 가져온다.

select userid, sum(price * amount) as `총구매금액`
from buytbl
group by userid
order by `총구매금액` desc
limit 5;

여러 기준으로 정렬하기

정렬 기준은 하나만 쓸 필요가 없다.

select userid, price, amount
from buytbl
order by price desc, amount asc;

이 경우 먼저 price를 내림차순으로 정렬하고, 가격이 같으면 amount를 오름차순으로 정렬한다.


ORDER BY와 LIMIT 정리

문법 역할

ORDER BY 조회 결과 정렬
ASC 오름차순
DESC 내림차순
LIMIT 조회 개수 제한

ORDER BY는 결과의 순서를 정하고, LIMIT은 그중 몇 개를 가져올지 정한다.


ORDER BY는 조회 결과를 정렬하고, LIMIT은 정렬된 결과에서 필요한 개수만 가져오는 문법이다.