오랑우탄의 반란
LeetCode | 1484. Group Sold Products By The Date (MySQL) GROUP_CONCAT 그룹별 행 한줄에 출력 본문
SQL/LeetCode
LeetCode | 1484. Group Sold Products By The Date (MySQL) GROUP_CONCAT 그룹별 행 한줄에 출력
5&2 2024. 8. 19. 10:44반응형
오늘도 오랑이는 문제를 풉니다.
1484. Group Sold Products By The Date


풀이 과정
products 칼럼 출력 방법 외에는 쉬운 문제입니다. 우선 아래와 같이 코드를 작성해줍니다.
SELECT SELL_DATE, COUNT(DISTINCT PRODUCT) AS NUM_SOLD
FROM ACTIVITIES
GROUP BY 1
ORDER BY 1;
이제 products 칼럼을 추가해야 하는데, product 의 각 행을 sell_date 기준으로 묶어서 쉼표(,)로 구분지어 오름차순으로 한 줄에 나열되게 출력해야 하는데요, CONCAT 을 바로 떠올리겠지만 그룹화가 어려워 보입니다.

이때 사용할 수 있는 함수가 바로 GROUP_CONCAT 입니다.
GROUP_CONCAT
GROUP BY 칼럼A 를 기준으로 칼럼 B 의 각 행을 묶어서 하나의 행에 나열해주는 함수
*GROUP BY 사용 필수
SELECT GROUP_CONCAT(DISTINCT 칼럼B ORDER BY 칼럼B SEPARATOR '-') AS GROUP
FROM TABLE
GROUP BY 칼럼A
- GROUP_CONCAT(DISTINCT): 중복 없이 나열
- GROUP_CONCAT(ORDER BY): 나열 순서 지정 (오름차순 디폴트)
- GROUP_CONCAT(SEPARATOR '문자'): 구분 문자 (쉼표 디폴트)
해당 문제에서는 SELL_DATE 기준으로 그룹, PRODUCT 를 쉼표로 구분해 PRODUCT 기준 오름차순 나열이므로 아래와 같은 쿼리로 짜줍니다. 이때 처음 작성했던 쿼리에서 ORDER BY 는 생략이 가능합니다.
SELECT GROUP_CONCAT(DISTINCT PRODUCT ORDER BY PRODUCT) AS PRODUCTS
FROM ACTIVITIES
GROUP BY SELL_DATE

최종 코드
SELECT SELL_DATE, COUNT(DISTINCT PRODUCT) AS NUM_SOLD,
GROUP_CONCAT(DISTINCT PRODUCT ORDER BY PRODUCT) AS PRODUCTS
FROM ACTIVITIES
GROUP BY 1;
오랑우탄이 영어를 하고 오랑이가 쿼리마스터가 되는 그날까지~
https://leetcode.com/problems/group-sold-products-by-the-date/
반응형
'SQL > LeetCode' 카테고리의 다른 글
LeetCode 리트코드 | 185. Department Top Three Salaries (MySQL) DENSE_RANK (0) | 2024.08.08 |
---|---|
LeetCode 리트코드 | 602. Friend Requests II: Who Has the Most Friends (MySQL) (0) | 2024.08.07 |
LeetCode 리트코드 | 1321. Restaurant Growth (MySQL) (0) | 2024.08.05 |
LeetCode 리트코드 | 1341. Movie Rating (MySQL) (0) | 2024.08.02 |
LeetCode 리트코드 | 626. Exchange Seats (MySQL) CASE, LAG/LEAD, ROW_NUMBER (0) | 2024.08.01 |