https://school.programmers.co.kr/learn/courses/30/lessons/131532
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
쇼핑몰 가입 회원 정보를 담은 USER_INFO 테이블, 온라인 상품 판매 정보를 담은 ONLINE_SALE 테이블을 이용하여 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해라. 결과는 년, 월, 성별을 기준으로 오름차순 정렬해라. 이 때, 성별 정보가 없는 경우 결과에서 제외하라.
코드
-- 코드를 입력하세요
SELECT YEAR(S.SALES_DATE), MONTH(S.SALES_DATE), U.GENDER, COUNT(DISTINCT(USER_ID))
FROM USER_INFO U
RIGHT OUTER JOIN ONLINE_SALE S
USING (USER_ID)
WHERE U.GENDER IS NOT NULL
GROUP BY YEAR(S.SALES_DATE), MONTH(S.SALES_DATE), U.GENDER
ORDER BY 1, 2, 3;
풀이
우선 두 테이블을 공통된 컬림인 USER_ID를 기준으로 JOIN 한 후, 주어진 조건인 성별 정보가 없는 행을 제외한다.
년, 월, 성별 기준으로 조인하고 상품을 구매한 회원 수를 집계해야 하는데 이 때 주의해야 할 점은 동일한 회원이 동일한 날짜에 여러 상품을 구매했을 수 있다. 따라서 COUNT(USER_ID)가 아닌 COUNT(DISTINCT(USER_ID))를 사용하여 회원을 중복 카운트하지 않도록 한다.
'SQL > Coding Test' 카테고리의 다른 글
[프로그래머스] 즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2024.03.21 |
---|---|
[프로그래머스] 조건에 맞는 개발자 찾기 (0) | 2024.03.20 |
[프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2024.03.20 |
[프로그래머스] 가격대 별 상품 개수 구하기 (0) | 2024.03.19 |
[프로그래머스] 물고기 종류 별 대어 찾기 (0) | 2024.03.15 |