오랑우탄의 반란

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/

반응형