TIL/SQL

프로그래머스| 상품을 구매한 회원 비율 구하기

jojoon2786 2024. 8. 14. 16:43

문제설명

다음은 어느 의류 쇼핑몰에 가입한 회원 정보를 담은 USER_INFO 테이블과 온라인 상품 판매 정보를 담은 ONLINE_SALE 테이블 입니다. USER_INFO 테이블은 아래와 같은 구조로 되어있으며 USER_ID, GENDER, AGE, JOINED는 각각 회원 ID, 성별, 나이, 가입일을 나타냅니다.

ONLINE_SALE 테이블은 아래와 같은 구조로 되어있으며 ONLINE_SALE_ID, USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 온라인 상품 판매 ID, 회원 ID, 상품 ID, 판매량, 판매일을 나타냅니다.

 

문제


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

 

나의풀이

 

처음에 서브쿼리를

where user_id in (select *
from USER_INFO a join ONLINE_SALE b on a.USER_ID = b.USER_ID
where year(a.JOINED) = 2021)

위와 같이 작성했었는데, Operand should contain 1 column(s) < 이런 오류가 발생하였다.

in은 단일 열만 허용되기 때문에 select * 로 여러 열이 가져와져 오류가 발생했다.

본쿼리에서 where 문에 서브쿼리를 사용하여 가져올 땐 in으로 가져올 컬럼 하나만 서브쿼리의 select 문에 써줘야한다는 것을 알게되었다.