Dev Hyeri

◖코딩 테스트◗▬▬▬▬▬▬▬▬▬/프로그래머스

[SQL KIT] (2024) 년, 월, 성별 별 상품 구매 회원 수 구하기(설명/코드/정답)

_hyeri 2024. 1. 26. 00:11

 

 

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131532

 

정상 코드.

SELECT YEAR(SALES_DATE) AS YEAR,
       MONTH(SALES_DATE) AS MONTH,
       GENDER,
       COUNT(DISTINCT USER_ID) AS USERS
FROM ONLINE_SALE JOIN USER_INFO USING (USER_ID)
WHERE GENDER IS NOT NULL 
GROUP BY YEAR, MONTH, GENDER
ORDER BY YEAR, MONTH, GENDER

 

내부 동작 순서 

 

1. FROM 절

ONLINE_SALE 테이블과 USER_INFO 테이블을 USER_ID를 사용하여 조인합니다.

 

2. WHERE 절

GENDER가 NULL이 아닌 경우를 필터링합니다.

 

3. GROUP BY 절 

문제 조건인 연월은 상품 구매일이자 판매일인 "SALES_DATE" 컬럼의 연, 월을 뜻한다. 
연도(YEAR), 월(MONTH), 성별(GENDER) 별로 그룹화하여 각 그룹에 대한 사용자 수를 계산합니다.

SELECT 절에서 사용한 별칭(YEAR, MONTH)도 그룹화에 사용됩니다. 

 

4. SELECT 절

SALES_DATE에서 YEAR와 MONTH를 추출하고, 그리고 USER_INFO 테이블에서 GENDER를 선택합니다. 마지막으로 각 연도(YEAR), 월(MONTH), 성별(GENDER) 별로 고유한 사용자 수(USERS)를 계산합니다. 

 

(DISTINCT를 사용하는 이유는 위 이미지에서 연도 22, 월 3, 성별 0(남자)의 경우를 표본으로 하여(  빨간색 상자  ) 확인할 수 있다. 그룹핑의 기준은  노란색 상자  인 연, 월, 성별이므로 USER_ID가 같은 68의 경우  파란색 글자   1로 카운팅이 되어야 한다.)  

 

 

5. ORDER BY 절

연도(YEAR), 월(MONTH), 성별(GENDER)을 기준으로 오름차순(디폴트) 정렬합니다.

 


 

초기 코드

 

SELECT YEAR(SALES_DATE) AS YEAR, 
       MONTH(SALES_DATE) AS MONTH, 
       GENDER, 
       COUNT(*) AS USERS
FROM USER_INFO JOIN ONLINE_SALE USING(USER_ID)
WHERE GENDER IS NOT NULL
GROUP BY YEAR(SALES_DATE), MONTH(SALES_DATE), GENDER
ORDER BY YEAR, MONTH, GENDER

 

=>오류

 

 

잘못된 결괏값

 

오류 원인

1. 데이터를 정렬 및 출력해 눈으로 보는 습관