본문 바로가기
SQL

[프로그래머스] 상품을 구매한 회원 비율 구하기 (Lv 5)

by 다람이도토리 2024. 1. 12.

https://school.programmers.co.kr/learn/courses/30/lessons/131534

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

대망의 5단계 문제.
가장 핵심은 1월달 가입 유저 전체 수량을 어떻게 고정시키는 것인가이다.
Select 문 자체에서 해당 값을 고정시켜버리면 된다. 뭐 from에서 가져오고 그러지 말고 그 값만 가져오면 되니까.

Select문 자체에서 고정시키는 방식 잊지 말기.

나머지는 평이하다. 5단계 답게 배울게 있는 문제.

SELECT
    YEAR(SALES_DATE) AS YEAR,
    MONTH(SALES_DATE) AS MONTH,
    COUNT(DISTINCT ONLINE_SALE.USER_ID) AS PURCHASED_USERS,
    ROUND(COUNT(DISTINCT ONLINE_SALE.USER_ID)/(SELECT COUNT(*) FROM USER_INFO WHERE YEAR(JOINED) = 2021), 1)
FROM
    ONLINE_SALE LEFT JOIN USER_INFO ON ONLINE_SALE.USER_ID = USER_INFO.USER_ID
WHERE YEAR(JOINED) = 2021
GROUP BY YEAR, MONTH
ORDER BY YEAR ASC, MONTH ASC

 

SQL 쿼리 문제를 풀어보면서 많이 배우는것은

- 무작정 join 마구 해서 뭐 가져오지 말기, join해두고 group by로 해서 묶어줄수 있는지 구조부터 파악하기
- 비슷한 맥락으로 무지성 from절에 subquery 박지말기.

그런거 안하고도, 그냥 구조를 정확히 파악해서 복잡한 문제도 해결 가능할 수 있음을 많이 배우고 있다.