[SQL#124 Group Sold Products By]

Gi Woon Lee·2024년 9월 14일

SQL

목록 보기
18/33

TIL (Today I Learned): SQL에서 날짜별로 팔린 제품 그룹화하기

문제 이해

  • 테이블: activities
    • : sell_date, product
    • PK 없음, 중복 허용
  • 각 행은 제품의 이름과 팔린 날짜를 담고 있음.
  • 각 날짜별로 팔린 제품의 수와 제품 이름들을 하나의 셀에 알파벳 순으로 정렬하여 출력해야 함.
  • 결과는 sell_date로 정렬되어야 함.

목표

  • 각 날짜마다 팔린 제품들을 하나의 셀에 넣어 출력하는 것.
  • 제품 이름은 알파벳 순서로 정렬되어야 함.

문제 해결 전략

  1. sell_date로 데이터를 그룹화하여 각 날짜마다 팔린 제품의 수를 계산.
  2. GROUP_CONCAT() 함수를 사용해 제품 이름들을 하나의 셀에 연결.
  3. DISTINCTORDER BY를 사용해 제품 이름을 고유하고 정렬된 형태로 저장.

사용한 SQL 코드

SELECT
    sell_date,
    COUNT(DISTINCT product) AS num_sold,
    GROUP_CONCAT(DISTINCT product ORDER BY product ASC) AS products
FROM 
    Activities 
GROUP BY 
    sell_date;

코드 설명

  • COUNT(DISTINCT product): 각 날짜마다 판매된 고유한 제품의 수를 계산하여 num_sold로 표시.
  • GROUP_CONCAT(DISTINCT product ORDER BY product ASC): 각 날짜마다 판매된 고유한 제품명을 알파벳 순서로 정렬하여 쉼표로 연결된 문자열로 반환.
  • GROUP BY sell_date: sell_date를 기준으로 그룹화하여 날짜별로 데이터를 집계.

중요한 포인트

  • GROUP_CONCAT() 함수 내부에서 ORDER BYDISTINCT를 사용할 수 있음. 이를 통해 데이터 정렬과 중복 제거가 가능.

입출력 예시

Input:

Activities table:
+------------+------------+
| sell_date  | product    |
+------------+------------+
| 2020-05-30 | Headphone  |
| 2020-06-01 | Pencil     |
| 2020-06-02 | Mask       |
| 2020-05-30 | Basketball |
| 2020-06-01 | Bible      |
| 2020-06-02 | Mask       |
| 2020-05-30 | T-Shirt    |
+------------+------------+

Output:

+------------+----------+------------------------------+
| sell_date  | num_sold | products                     |
+------------+----------+------------------------------+
| 2020-05-30 | 3        | Basketball,Headphone,T-Shirt |
| 2020-06-01 | 2        | Bible,Pencil                 |
| 2020-06-02 | 1        | Mask                         |
+------------+----------+------------------------------+

틀린 부분 수정

  • 틀린 부분은 없습니다. 다만 중요한 점은 GROUP_CONCAT() 함수 내부에서 DISTINCTORDER BY를 활용할 수 있다는 사실을 잘 이해하고 사용한 것입니다.

배운 점

  • GROUP_CONCAT() 함수의 활용 방법과 ORDER BY, DISTINCT와의 조합을 통해 복잡한 문자열 조작을 효율적으로 처리할 수 있다는 점을 학습.

이러한 접근 방식을 통해 SQL에서 효율적인 데이터 그룹화와 집계가 가능함을 이해할 수 있었습니다.

GROUP_CONCAT() 함수의 Syntax 정리

GROUP_CONCAT() 함수는 SQL에서 여러 행의 값을 하나의 문자열로 결합할 때 사용하는 함수입니다. 특히, 데이터베이스에서 문자열을 결합하여 출력할 때 유용하게 사용됩니다.

기본 Syntax

GROUP_CONCAT([DISTINCT] column_name ORDER BY column_name [ASC|DESC] SEPARATOR 'separator')

주요 옵션 설명

  • column_name: 결합할 열의 이름을 지정합니다.
  • DISTINCT: 중복되는 값을 제거하고 결합합니다.
  • ORDER BY: 결합할 값들을 정렬합니다. ASC(오름차순) 또는 DESC(내림차순) 옵션을 사용하여 정렬 방향을 지정할 수 있습니다.
  • SEPARATOR 'separator': 값들 사이에 넣을 구분자를 지정합니다. 기본 구분자는 쉼표(,)입니다.

예시

-- 제품 이름들을 알파벳 순서로 정렬하고 쉼표로 구분하여 결합
SELECT 
    GROUP_CONCAT(DISTINCT product ORDER BY product ASC SEPARATOR ', ') AS products
FROM 
    activities;

정리 포인트

  • GROUP_CONCAT() 함수는 여러 값을 하나의 문자열로 결합할 때 사용되며, 정렬 및 중복 제거 옵션을 활용하여 데이터를 원하는 형태로 출력할 수 있습니다.
  • 기본적으로 쉼표로 구분하지만 SEPARATOR를 통해 원하는 구분자를 설정할 수 있어 유연하게 사용 가능합니다.

0개의 댓글