https://school.programmers.co.kr/learn/courses/30/lessons/131534
대망의 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 박지말기.
그런거 안하고도, 그냥 구조를 정확히 파악해서 복잡한 문제도 해결 가능할 수 있음을 많이 배우고 있다.
'SQL' 카테고리의 다른 글
[파이썬 압수] (2) SQL로만 Funnel 구하기 (0) | 2024.01.15 |
---|---|
[파이썬 압수] (1) SQL로만 DAU, MAU, stickness 구하기 (0) | 2024.01.15 |
[프로그래머스] 저자별 카테고리별 매출액 집계하기 (Lv 3) (0) | 2024.01.12 |
[프로그래머스] 년,월,성별별 상품 구매 회원 수 구하기 (Lv 4) (0) | 2024.01.12 |
[SQLD] Grouping 함수, Window 함수 정리 (1) (1) | 2023.12.27 |