[탐구] 다중정렬이란?

dragonloly·2025년 1월 27일

SQL

목록 보기
1/19

ORDER BY에서의 다중정렬

SQL에서 ORDER BY 구문을 사용한 다중 정렬이란, 결과를 정렬할 때 여러 개의 기준(컬럼)을 순서대로 적용할 수 있다는 의미입니다.

즉, 하나의 ORDER BY 구문에서 여러 정렬 조건을 나열하면, SQL은 왼쪽부터 오른쪽으로 순차적으로 정렬을 수행합니다.

예제 1: 다중 정렬 예시

SELECT USER_ID, PRODUCT_ID, SALES_AMOUNT
FROM ONLINE_SALE
ORDER BY USER_ID ASC, PRODUCT_ID DESC;

설명

  • 먼저 USER_ID를 오름차순(ASC)으로 정렬합니다.
  • 동일한 USER_ID 그룹 내에서, PRODUCT_ID를 내림차순(DESC)으로 정렬합니다.

예제 2: 정렬 흐름 설명

위의 데이터를 ORDER BY USER_ID ASC, PRODUCT_ID DESC로 정렬하면 다음과 같이 됩니다:

  • USER_ID 기준으로 오름차순 → 101부터 102 순서로 정렬.
  • 동일한 USER_ID(예: 101) 내에서 PRODUCT_ID 기준으로 내림차순 → 300 → 200 순서.

결과

정렬 기준이 여러 개인 이유?

우선순위 적용:

SQL은 왼쪽에서 오른쪽으로 적용된 기준에 따라 정렬을 수행.
첫 번째 기준이 동일하면 두 번째 기준이 적용됨.

정렬 순서 조합 가능:

ASC와 DESC를 조합해 원하는 방식으로 데이터를 구성할 수 있음.

예제 3: 세 개 이상의 정렬 기준 적용

SELECT USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE
FROM ONLINE_SALE
ORDER BY USER_ID ASC, PRODUCT_ID DESC, SALES_DATE ASC;

위 예제에서는:

  • USER_ID 오름차순
  • PRODUCT_ID 내림차순
  • SALES_DATE 오름차순 (같은 회원이 같은 상품을 여러 번 샀다면 날짜순으로 정렬)

결론

"ORDER BY 구문을 사용하여 다중 정렬을 적용합니다" 라는 말은 다음을 의미

  • 여러 정렬 기준을 쉼표( , )로 나열하여 데이터의 정렬 순서를 단계별로 지정할 수 있음.
  • SQL은 각 정렬 기준을 왼쪽에서 오른쪽 순서대로 적용함.
  • 간단한 ORDER BY 구문으로도 충분히 강력한 정렬이 가능하며, 별도의 조건문(IF, CASE)을 사용할 필요가 없음.

GROUP BY에서의 다중정렬

GROUP BY와 ORDER BY의 차이

SQL 쿼리에서 GROUP BY가 실행되는 순서는 다음과 같습니다:

FROM → 테이블에서 데이터 조회.
WHERE → 조건이 있으면 필터링 (필요 시 사용).
GROUP BY → 데이터를 지정된 컬럼 기준으로 그룹화.
HAVING → 그룹화된 결과에서 조건 필터링.
SELECT → 최종 결과를 선택.
ORDER BY → 결과 정렬.

GROUP BY에서 다중 조건의 일반적인 사용 예시

예제 1: 회원별 및 상품별 판매량 합계

SELECT USER_ID, PRODUCT_ID, SUM(SALES_AMOUNT) AS TOTAL_SALES
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
ORDER BY TOTAL_SALES DESC;

예제 2: 특정 기간 내에 상품을 구매한 사용자 수

SELECT USER_ID, COUNT(DISTINCT PRODUCT_ID) AS UNIQUE_PRODUCTS
FROM ONLINE_SALE
WHERE SALES_DATE BETWEEN '2023-01-01' AND '2023-12-31'
GROUP BY USER_ID
ORDER BY UNIQUE_PRODUCTS DESC;

결론

  • GROUP BY도 다중 기준을 적용할 수 있음.
  • ORDER BY와 마찬가지로 여러 열을 쉼표로 나열하여 그룹화 수행 가능.
  • 다중 기준을 적용하면 데이터를 보다 정밀하게 분석할 수 있음.
  • GROUP BY는 데이터를 요약할 때, ORDER BY는 정렬할 때 사용
profile
코드 기록하기 : )

0개의 댓글