250x250
Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

데이터 놀이터

JOIN - 상품을 구매한 회원 비율 구하기 본문

SQL

JOIN - 상품을 구매한 회원 비율 구하기

jjjk84 2023. 8. 29. 13:47
728x90

1. 문제

 

USER_INFO 테이블과 ONLINE_SALE 테이블에서

2021년에 가입한 전체 회원들 중

상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을

년, 월 별로 출력하는 SQL문을 작성해주세요.

상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고,

전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.

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

 

2. 문제 조건

 

  1. 2021년에 가입한 전체 회원들 중 -> GROUP BY 전 조건이므로 WHERE
  2. 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수) -> SELECT 내 수식
  3. 년, 월 별로 출력 -> GROUP BY
  4. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림 -> ROUND( , 1)
  5. 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬 -> ORDER BY

 

3. 코드 작성

 

/*
1. 2021년에 가입한 전체 회원들 중
2. 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력
3. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림
4. 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬
*/


SET @user_count = (SELECT COUNT(*) FROM USER_INFO WHERE YEAR(JOINED) = 2021);

SELECT YEAR(SALE.SALES_DATE) AS YEAR
     , MONTH(SALE.SALES_DATE) AS MONTH
     , COUNT(DISTINCT(SALE.USER_ID)) AS PUCHASED_USERS
     , ROUND(COUNT(DISTINCT(SALE.USER_ID)) / @user_count, 1) AS PUCHASED_RATIO
FROM ONLINE_SALE AS SALE
    LEFT JOIN USER_INFO AS USER ON SALE.USER_ID = USER.USER_ID
WHERE YEAR(USER.JOINED) = '2021'
GROUP BY YEAR, MONTH
ORDER BY YEAR, MONTH;

 

4. 회고

 

 

[SQL] 고급 문법 ) 변수 선언과 출력 (@, SET, SELECT,PREPARE, EXECTUE, LIMIT)

sql도 변수를 선언하고 사용할 수 있다. 임시저장소, 이후 다른 사람이 접속 또는 sql 종료 후 실행하면 날라간다. test용도SET @변수이름 = 변수의 값set @txt = '가수 이름 => ';set @height = 166;SELECT @변수

velog.io

 

  • 변수를 사용하기 전 SELECT 문 안에다 SELECT 문을 넣는 방식으로 풀었는데, 이런 경우 조회가 N 제곱 형태로 이루어지기 때문에 매우 비효율적이다.
728x90