mysql 문제풀이/easy

프로그래머스 Lv 4 - 년, 월, 성별 별 상품 구매 회원 수 구하기

gooreumsea 2023. 7. 14. 01:57

습득한 점:

이전에는 테이블을 보이는데로 조인했다면,
지금은 테이블이 조인되었을 때의 형태를 머릿속으로 고려하면서 쿼리를 구성할 수 있게되었다.

 

 

문제:

USER_INFO 테이블과 ONLINE_SALE 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 쿼리문 작성

결과는 년, 월, 성별을 기준으로 오름차순 정렬.

이때, 성별 정보가 없는 경우 결과에서 제외.

 

문제파악:

크게 어려워 보이는 부분은 없었다.

다만 "동일한 날짜, 회원 ID, 상품 ID 조합에 대해서는 하나에 판매 데이터만 존재한다" 이 언급만 조금 더 고려하면 되었다.

 

결과 값은 이렇게 만들어져야 한다.

ONLINE_SALE만을 볼때, 날짜, 회원ID, 상품ID 조합에 대해서는 고유의 판매데이터만 존재한다고 했지만,
ONLINE_SALE 테이블과 USER_INFO 테이블이 합쳐졌을 때의 상황에서는 중복데이터가 생겨날 수 있음

(USER_ID 마다 성별은 다르게 설정될테니 제외, 나머지 AGE(나이)나 JOINED(가입일)로 인해 중복데이터가 발생될 수는 있을 것 같다)

 

해서, USER_ID를 카운트 할때는 DISTINCT가 필요하다.

 

풀이:

 

SELECT YEAR(sales_date) AS YEAR
     , MONTH(sales_date) AS MONTH
     , gender AS GENDER
     , COUNT(DISTINCT OS.USER_ID) AS USERS
     
FROM ONLINE_SALE AS OS
     INNER JOIN USER_INFO AS UI ON OS.USER_ID = UI.USER_ID
WHERE GENDER IS NOT NULL       
GROUP BY 1,2,3
ORDER BY 1 ASC ,2 ASC ,3 ASC