CodeGym /행동 /SQL SELF /실제 문제에서 데이터 포맷팅과 정렬 예시

실제 문제에서 데이터 포맷팅과 정렬 예시

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

데이터 정렬과 포맷팅은 진짜 중요한 스킬이야. 이걸로 읽기 편한 리포트 만들고, 데이터 분석도 더 효율적으로 할 수 있고, 사용자랑 소통할 때도 훨씬 좋아져. 이런 건 분석 리포트 만들거나, 내보내기용 데이터 준비하거나, 그냥 평소에 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

우리 목표:

  1. first_name이랑 last_name을 합쳐서 full_name 컬럼 만들기.
  2. 유니크한 고객만 뽑기.
  3. 리스트를 성(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

우리 목표:

  1. formatted_order_date 컬럼을 만들어서 주문 날짜를 DD-MM-YYYY 포맷으로 보여주기.
  2. 고객명과 날짜가 같은 중복 레코드는 빼고(유니크한 customer_name + order_date 조합만 남기기).
  3. 주문을 날짜 기준으로 내림차순 정렬하기.
  4. 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
  1. formatted_product 컬럼을 만들어서 product_name이랑 카테고리를 하이픈(-)으로 이어서 보여주기. 예: 폰 - 전자제품.
  2. product_namecategory 조합이 중복된 건 빼기.
  3. 상품을 카테고리, 그리고 가격(저렴한 순)으로 정렬하기.

아래는 이 문제를 풀 수 있는 쿼리 구조야:

SELECT DISTINCT
    CONCAT(product_name, ' - ', category) AS formatted_product,
    price
FROM products
ORDER BY category, price ASC;

이 쿼리 결과가 어떻게 나올지 직접 상상해봐!

CONCAT(), DISTINCT, ORDER BY 같은 함수 쓰면 데이터가 훨씬 읽기 쉽고, 구조적으로 정리돼. 이건 실제 프로젝트나 문제 풀 때 진짜 중요하니까, 꼭 예제 보면서 연습해봐!

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION