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