[SQL] Programmers - 년, 월, 성별 별 상품 구매 회원 수 구하기 <GROUP BY, INNER JOIN, COUNT>
2023. 4. 7. 21:26ㆍ공부/SQL
Problem
Solution
USER_INFO 테이블과 ONLINE_SALE 테이블은 USER_ID로 JOIN을 하면 문제를 쉽게 해결 할 수 잇을것 같다.
SELECT *
FROM USER_INFO u
INNER JOIN ONLINE_SALE o ON u.USER_ID = o.USER_ID
이제 이 테이블에서 년, 월, 성별 별로 상품을 구매한 회원의 숫자를 출력해야한다. 이 말은 GROUP BY YEAR, MONTH, GENDER 이라고 해석하면 된다. 여기까진 매우 쉽다.
SELECT
YEAR(o.SALES_DATE) AS YEAR,
MONTH(o.SALES_DATE) AS MONTH,
u.GENDER,
COUNT(DISTINCT(o.USER_ID))
FROM USER_INFO u
INNER JOIN ONLINE_SALE o ON u.USER_ID = o.USER_ID
GROUP BY YEAR, MONTH, GENDER
출력 결과를 보면 GENDER 가 비어있는데 NULL 값을 제외해주는 조건을 추가해야겠다. 그리고 COUNT(DISTINCT(o.USER_ID)) 에서 DISTINCT() 함수를 사용한 것은 중복된 회원을 없애야 정확한 유저의 숫자를 알 수 있기 때문인데 이는 문제에서 원하는 답에 따라 다를 수 있겠다.
WHERE GENDER IS NOT NULL
정렬도 간단하게
ORDER BY YEAR, MONTH, GENDER;
추가해주면 끝날것 같다.
SELECT
YEAR(SALES_DATE) AS YEAR,
MONTH(SALES_DATE) AS MONTH,
u.GENDER,
COUNT(DISTINCT(o.USER_ID)) AS USERS
FROM USER_INFO u
INNER JOIN ONLINE_SALE o ON u.USER_ID = o.USER_ID
WHERE u.GENDER IS NOT NULL
GROUP BY YEAR, MONTH, GENDER
ORDER BY YEAR, MONTH, GENDER;
성공
'공부 > SQL' 카테고리의 다른 글
[SQL] Programmers - 나이 정보가 NULL 회원 수 구하기 <NULL, COUNT, SUM> (0) | 2023.04.08 |
---|---|
[SQL] Programmer - 입양시각 구하기(2) <GROUP BY, SET @> (0) | 2023.04.07 |
[SQL] PROGRAMMERS - 즐겨찾기가 가장 많은 식당 정보 출력 <GROUP BY, SUBQUERY> (0) | 2023.04.07 |
[SQL] Programmers - 조건에 부합하는 중고거래 댓글 조회 <INNER JOIN, WHERE, DATE_FORMAT> (0) | 2023.04.07 |
[SQL] Hackerrank - Symmetric Pairs (Not Done) (0) | 2023.04.06 |