728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
USER_INFO 테이블과 ONLINE_SALE 테이블에서
2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와
상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을
년, 월 별로 출력하는 SQL문을 작성해주세요.
상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고,
전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.
-- 코드를 입력하세요
WITH TMP AS(
SELECT YEAR(JOINED) AS YEAR ,COUNT(DISTINCT USER_ID)
FROM USER_INFO
WHERE YEAR(JOINED) = 2021
)
SELECT YEAR(A.SALES_DATE) AS YEAR, MONTH(A.SALES_DATE) AS MONTH,
COUNT(DISTINCT B.USER_ID) AS PUCHASED_USERS ,
ROUND(COUNT(DISTINCT B.USER_ID)/
(SELECT COUNT(DISTINCT USER_ID)
FROM USER_INFO
WHERE YEAR(JOINED) = 2021), 1) AS PUCHASED_RATIO
FROM ONLINE_SALE A LEFT OUTER JOIN USER_INFO B ON A.USER_ID = B.USER_ID
WHERE YEAR(B.JOINED) = 2021
GROUP BY YEAR, MONTH;
다른건 어려운게 없었는데, 2021년에 가입한 회원수를 가져오는 거에서 고민이 많았다.
그래서 생각해봤던 거 !
위에 WITH 사용해서 새로운 테이블 만들어서 JOIN해서 쓰기(드디어 해봤다)
> 테이블 3개를 조인할 필요는 없을 것 같은데, 서브쿼리로 넣어쓰면 안될까?
> 집계함수 안에서도 서브쿼리 사용이 가능한가?
> 해보자 !
> 해결
이제 GROUP BY도 어느정도 감이 잡히고 서브쿼리도 조금은 감이 잡히는 것 같다.
아직 완벽하진 않지만 .. ! 더욱 정진해야지.
728x90
'코테 > SQL' 카테고리의 다른 글
[Programmers] PCSQL 샘플문제 4번 (MYSQL) (0) | 2024.02.02 |
---|---|
[Solvesql] 실전반 무료 문제 풀이 (SQLite) (1) | 2024.02.02 |
[Solvesql] 입문반 무료 문제 풀이 (SQLite) (0) | 2024.01.28 |
[Programmers] Lv.4 입양시각 구하기 (재귀) (1) | 2024.01.27 |
[Programmers] IFNULL, 조건에 맞는 값 구하기 (0) | 2023.05.02 |