SQL 문제
프로그래머스 - 년, 월, 성별 별 상품 구매 회원 수 구하기
DDG
2024. 1. 5. 15:10
년, 월, 성별 별 상품 구매 회원 수 구하기
USER_INFO 테이블과 ONLINE_SALE 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요. 결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요. 이때, 성별 정보가 없는 경우 결과에서 제외해주세요.
-- 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요.
-- 결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요. 이때, 성별 정보가 없는 경우 결과에서 제외해주세요.
with sales_info as(
SELECT
year(sale.sales_date) as Year_date,
month(sale.sales_date) as Month_date,
info.gender as Gender,
count(distinct info.user_id) as USERS
FROM
user_info info inner join online_sale sale
ON
info.user_id = sale.user_id
GROUP BY
1,2,3
)
SELECT
Year_date,
Month_date,
Gender,
USERS
FROM
sales_info
WHERE
Gender is not null
Order By
1,2,3
이번 특강과 문제를 풀어보면서
서브쿼리를 많이 써서 복잡한 메인 쿼리를 만드는 것 대신에
가상의 view인 with 구문을 사용해서 푸는 방법으로 문제를 풀어보았다.
사실 with 구문에 있는 쿼리를 메인 쿼리에 쓰면 되지만
with 구문을 연습하고자 한번 돌려봤는데 정답이길래 만족한다.
쿼리 진행 순서
1. sales_info 테이블에서 Year_date, Month_date, Gender, Users를 선택한다.
2. WHERE 로 성별이 없는 경우 = null 인경우는 제외하는 조건 추가.
3. Group by로 년,월,성별별로 그룹화를 하고, 이 순으로 order by로 오름차순 정렬
https://school.programmers.co.kr/learn/courses/30/lessons/131532