데이터 정렬과 포맷팅은 진짜 중요한 스킬이야. 이걸로 읽기 편한 리포트 만들고, 데이터 분석도 더 효율적으로 할 수 있고, 사용자랑 소통할 때도 훨씬 좋아져. 이런 건 분석 리포트 만들거나, 내보내기용 데이터 준비하거나, 그냥 평소에 DB 다룰 때도 자주 써. 실제로 일하다 보면 데이터를 예쁘게 포맷팅하거나, 중복된 레코드 지우거나, 보기 좋게 정렬해야 하는 일이 진짜 많아. 오늘은 바로 그걸 같이 해볼 거야!
예시 1: 이름과 성 합치고, 성 기준으로 정렬된 유니크 고객 리스트 만들기
우리에겐 customers 테이블이 있고, 여기에 고객 정보가 들어있어:
| id | first_name | last_name | city |
|---|---|---|---|
| 1 | Alex | Lin | New York |
| 2 | Maria | Chi | Los Angeles |
| 3 | Alex | Lin | New York |
| 4 | Anna | Song | Chicago |
우리 목표:
first_name이랑last_name을 합쳐서full_name컬럼 만들기.- 유니크한 고객만 뽑기.
- 리스트를 성(
last_name) 기준으로 정렬하기.
SQL 쿼리
SELECT DISTINCT
CONCAT(first_name, ' ', last_name) AS full_name,
city
FROM customers
ORDER BY last_name;
| full_name | city |
|---|---|
| Maria Chi | Los Angeles |
| Alex Lin | New York |
| Anna Song | Chicago |
여기서 Alex Lin처럼 중복된 레코드는 DISTINCT 덕분에 사라졌고, 전체 리스트는 성 기준으로 알파벳 순서로 정렬됐어.
예시 2: 주문 데이터 포맷팅과 정렬
orders 테이블에는 주문 정보가 들어있어:
| order_id | customer_name | order_date | total_amount |
|---|---|---|---|
| 1 | Alex Lin | 2023-10-01 | 1500 |
| 2 | Maria Chi | 2023-10-02 | 2000 |
| 3 | Alex Lin | 2023-10-03 | 1500 |
| 4 | Anna Song | 2023-10-04 | 3000 |
우리 목표:
formatted_order_date컬럼을 만들어서 주문 날짜를 DD-MM-YYYY 포맷으로 보여주기.- 고객명과 날짜가 같은 중복 레코드는 빼고(유니크한
customer_name+order_date조합만 남기기). - 주문을 날짜 기준으로 내림차순 정렬하기.
- SQL 쿼리
SELECT DISTINCT
customer_name,
TO_CHAR(order_date, 'DD-MM-YYYY') AS formatted_order_date,
total_amount
FROM orders
ORDER BY order_date DESC;
결과:
| customer_name | formatted_order_date | total_amount |
|---|---|---|
| Anna Song | 04-10-2023 | 3000 |
| Alex Lin | 03-10-2023 | 1500 |
| Maria Chi | 02-10-2023 | 2000 |
TO_CHAR() 함수로 날짜를 DD-MM-YYYY 포맷으로 바꿨고, DISTINCT로 중복 레코드도 제거했어.
예시 3: 학생 "이름 + 성" 유니크 조합 뽑고, 성과 생일 기준으로 정렬
students 테이블에는 학생 정보가 들어있어:
| student_id | first_name | last_name | birth_date |
|---|---|---|---|
| 1 | Alex | Lin | 2001-03-15 |
| 2 | Maria | Chi | 2000-06-20 |
| 3 | Alex | Lin | 2001-03-15 |
| 4 | Anna | Song | 1999-10-10 |
우리 목표:
- 이름과 성을 합쳐서
full_name컬럼 만들기. - "이름 + 성" 유니크 조합만 뽑기.
- 학생을 성, 그리고 생일 순으로 정렬하기.
SELECT DISTINCT
CONCAT(first_name, ' ', last_name) AS full_name,
birth_date
FROM students
ORDER BY last_name, birth_date;
결과:
| full_name | birth_date |
|---|---|
| Maria Chi | 2000-06-20 |
| Alex Lin | 2001-03-15 |
| Anna Song | 1999-10-10 |
특히 주의! "Alex Lin" 학생처럼 똑같은 레코드는 한 줄로 합쳐졌고, 정렬은 먼저 성, 그 다음 생일 순서로 됐어.
실습 과제
오늘 배운 걸로 아래 문제를 한번 풀어봐!
문제: products 테이블이 있고, 데이터는 아래와 같아:
| product_id | category | product_name | price |
|---|---|---|---|
| 1 | 전자제품 | 폰 | 50000 |
| 2 | 의류 | 자켓 | 8000 |
| 3 | 전자제품 | 노트북 | 70000 |
| 4 | 의류 | 자켓 | 8000 |
formatted_product컬럼을 만들어서product_name이랑 카테고리를 하이픈(-)으로 이어서 보여주기. 예:폰 - 전자제품.product_name과category조합이 중복된 건 빼기.- 상품을 카테고리, 그리고 가격(저렴한 순)으로 정렬하기.
아래는 이 문제를 풀 수 있는 쿼리 구조야:
SELECT DISTINCT
CONCAT(product_name, ' - ', category) AS formatted_product,
price
FROM products
ORDER BY category, price ASC;
이 쿼리 결과가 어떻게 나올지 직접 상상해봐!
CONCAT(), DISTINCT, ORDER BY 같은 함수 쓰면 데이터가 훨씬 읽기 쉽고, 구조적으로 정리돼. 이건 실제 프로젝트나 문제 풀 때 진짜 중요하니까, 꼭 예제 보면서 연습해봐!
GO TO FULL VERSION