CodeGym /행동 /SQL SELF /데이터 정렬하기 (ORDER BY): 오름차순과 내림차순 정렬 (ASC, DESC)

데이터 정렬하기 (ORDER BY): 오름차순과 내림차순 정렬 (ASC, DESC)

SQL SELF
레벨 2 , 레슨 3
사용 가능

DB 다루다 보면 데이터에 순서가 필요할 때가 진짜 많아. 예를 들어:

  • "가장 비싼 상품 10개만 보여줘."
  • "최근 주문이 뭐야?"
  • "학생들 나이, 어린 순서대로 알려줘."

데이터를 정렬하고 싶은 건 당연한 거지. 아무리 프로 개발자여도, 뒤죽박죽인 데이터 보는 건 별로잖아. 그래서 SQL에서는 결과를 정렬할 수 있게 ORDER BY라는 도구를 줘.

ORDER BY로 정렬하는 기본

ORDER BY는 결과 집합에서 행을 정렬해주는 마법 같은 키워드야. 이거 없으면 데이터는 "아무 순서"로 나와 (이건 DB 오류가 아니라, 그냥 순서가 보장 안 된다는 뜻이야).

ORDER BY 문법은 이렇게 생겼어:

SELECT 컬럼1, 컬럼2
FROM 테이블
ORDER BY 컬럼1 DESC;
  • 컬럼1: 정렬하고 싶은 컬럼 이름.
  • ASC: 오름차순 정렬 (이게 기본값이라서 생략해도 돼).
  • DESC: 내림차순 정렬.

예시

예를 들어, students 테이블이 있다고 해보자:

id name age
1 Alex 22
2 Maria 19
3 Otto 21

학생들을 나이 오름차순으로 정렬해보자:

SELECT name, age
FROM students
ORDER BY age ASC;

결과:

name age
Maria 19
Otto 21
Alex 22

정렬 방향을 내림차순으로 바꾸면:

SELECT name, age
FROM students
ORDER BY age DESC;

결과는 이렇게 나와:

name age
Alex 22
Otto 21
Maria 19

여러 컬럼으로 정렬하기

가끔은 컬럼 하나만으론 부족할 때가 있어. 예를 들어, 같은 나이의 학생이 여러 명이면 이름으로도 추가 정렬하고 싶을 수 있지.

여러 컬럼으로 정렬하는 방법:

SELECT 컬럼1, 컬럼2
FROM 테이블
ORDER BY 컬럼1 DESC, 컬럼2 ASC;

다음 테이블로 예시 들어볼게:

id name age
1 Alex 22
2 Maria 19
3 Otto 21
4 Anna 19

쿼리:

SELECT name, age
FROM students
ORDER BY age ASC, name ASC;

결과:

name age
Anna 19
Maria 19
Otto 21
Alex 22

여기서는 먼저 나이(오름차순)로 정렬하고, 같은 나이끼리는 이름(알파벳순)으로 정렬한 거야.

별칭으로 정렬하기

컬럼에 alias(별칭) 썼으면, 그 별칭으로도 정렬 가능해.

SELECT name AS "이름", age AS "나이"
FROM students
ORDER BY "나이" DESC;

결과:

이름 나이
Alex 22
Otto 21
Maria 19

이게 왜 중요하냐면, 예전엔 계산 컬럼에 별칭 붙이고 정렬하는 게 좀 복잡했거든.

계산 컬럼으로 정렬하기

SQL에서는 쿼리 안에서 계산도 할 수 있고, 그 결과로 정렬도 할 수 있어.

예시 1. 간단한 계산

SELECT name, age, age * 2 AS doubled_age
FROM students
ORDER BY doubled_age DESC;

결과:

name age doubled_age
Alex 22 44
Otto 21 42
Maria 19 38

예시 2. 함수 사용하기 예를 들어, products 테이블에 상품 가격이 있다고 해보자:

product_name price
상품 A 100
상품 B 200
상품 C 150

이제 가격에 0.9 곱해서(예: 할인 적용) 반올림한 값으로 정렬해보자. ROUND 함수는 소수점 자리까지 반올림해줘.

SELECT product_name, price, ROUND(price * 0.9, 1) AS discounted_price
FROM products
ORDER BY discounted_price ASC;

결과는 이렇게 나와:

product_name price discounted_price
상품 A 100 90
상품 C 150 135
상품 B 200 180

정렬의 실전 활용

정렬은 이런 상황에서 특히 중요해:

  • 월간 TOP 10 판매 같은 리포트 만들 때.
  • UI에 데이터 뿌릴 때, 예를 들어 주문 목록을 날짜순으로 보여줄 때.
  • 분석용 리스트 만들 때, 예를 들어 우선순위별로 그룹 나눌 때.

ORDER BY 쓸 때 흔한 실수

실수는 언제든 할 수 있어. 아래는 꼭 신경 써야 할 포인트야:

  • 존재하지 않는 컬럼으로 정렬하면 에러 나: column "not_a_column" does not exist.
  • 계산 컬럼에 alias 썼는데, 그 alias가 상위 쿼리에서만 정의돼 있으면 헷갈릴 수 있어.
  • 정렬 방향(ASC/DESC) 안 쓰면 PostgreSQL은 기본적으로 ASC로 정렬해. 이건 에러는 아니지만, 예상과 다를 수 있어.

이제 ORDER BY로 PostgreSQL에서 정렬하는 법 알았지? 데이터 정렬 잘 하면 SQL 쿼리 효율이 확 올라가. 다음 주제로 고고! 😉

1
설문조사/퀴즈
SQL 소개, 레벨 2, 레슨 3
사용 불가능
SQL 소개
SQL 소개
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION