SQL 튜터 세션 정리

SQL
LeetCode
LeetCode 1484에서 GROUP_CONCAT으로 날짜별 판매 상품 목록을 만드는 패턴 정리
Published

2026.06.01

오늘 푼 문제

  • 문제: LeetCode 1484. Group Sold Products By The Date
  • 핵심 개념: 중복 제거, 날짜별 집계, 문자열 집계
  • 사용 함수: GROUP_CONCAT()

풀이 코드

WITH t1 AS (
    SELECT DISTINCT sell_date, product
    FROM Activities
)
SELECT
    sell_date,
    COUNT(product) AS num_sold,
    GROUP_CONCAT(product ORDER BY product SEPARATOR ',') AS products
FROM t1
GROUP BY sell_date
ORDER BY sell_date;

핵심 개념 정리

이 문제는 같은 날짜에 같은 상품이 여러 번 등장할 수 있으므로, 먼저 (sell_date, product) 조합의 중복을 제거해야 한다.

SELECT DISTINCT sell_date, product
FROM Activities

그다음 날짜별로 묶어서 서로 다른 상품 수와 상품명 목록을 만든다.

GROUP BY sell_date

엑셀의 TEXTJOIN처럼 여러 행의 문자열을 하나로 합치는 MySQL 함수는 GROUP_CONCAT()이다.

GROUP_CONCAT(product ORDER BY product SEPARATOR ',')

여기서 ORDER BY product는 상품명을 사전순으로 정렬하기 위한 조건이고, SEPARATOR ','는 쉼표로 연결하겠다는 의미다.

오늘의 메타 정리

처음 접근은 좋았다. 문제를 다음처럼 정확히 분해했다.

  1. 중복 행이 있을 수 있다.
  2. 날짜별 서로 다른 상품 수를 세야 한다.
  3. 같은 날짜의 상품명을 하나의 문자열로 합쳐야 한다.

특히 TEXTJOIN 같은 함수가 있을 것이라고 추론한 점이 좋았다. 실제 MySQL에서는 같은 역할을 GROUP_CONCAT()이 수행한다.

주의할 점은 CTE 문법에서 닫는 괄호가 빠지지 않게 하는 것, 그리고 LeetCode 요구사항처럼 상품명을 정렬해야 할 때는 GROUP_CONCAT() 내부에 ORDER BY를 넣어야 한다는 점이다.

다음에 공부할 것