문제설명
다음은 어느 의류 쇼핑몰에 가입한 회원 정보를 담은 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 문에 써줘야한다는 것을 알게되었다.
'TIL > SQL' 카테고리의 다른 글
리트코드| Students and Examinations (My SQL) (0) | 2024.09.03 |
---|---|
리트코드| 온도 상승(MySQL) (0) | 2024.08.22 |
프로그래머스| 자동차 대여 기록 별 대여 금액 구하기(MySQL) (0) | 2024.08.09 |
프로그래머스| 입양 시각 구하기(2) (MySQL) <RECURSIVE CTE> (2) | 2024.08.07 |
프로그래머스| 오프라인/온라인 판매 데이터 통합하기(My SQL) (0) | 2024.08.05 |