SQL 연습문제 10-1
thelook_ecommerce 데이터 세트, events 테이블에는 유저의 웹 사이트 접속기록 데이터가 기록되어있습니다.
이벤트 기록에서 이벤트 타입이 purchase인 이벤트가 10번 이상 등록된 사람을 "실 고객"라고 부릅니다.
실고객에 해당하는 회원의 **이벤트 정보(events)**들을 유저 아이디 순으로 조회하세요.
실고객에 해당하는 user_id들을 먼저 구한뒤에 해당 user_id들을 이용해서 이벤트 정보를 조회하세요.
- 조회 항목 : 이벤트id(id), 유저ID(user_id), 도시(city), 주(state), 우편번호(postal_code), 브라우저 종류(browser), 유입경로(traffic_source), 이벤트 타입(event_type)
- 정렬 : 유저ID 오름차순
select id, user_id, city, state, postal_code, browser, traffic_source, event_type
from `thelook_ecommerce.events`
where user_id in (
select user_id
from `thelook_ecommerce.events`
where event_type = 'purchase'
group by user_id
having count(user_id) >= 10
)
order by user_id
처음에는 그냥
select *
from `thelook_ecommerce.events`
where event_type = 'purchase'
group by user_id
having count(user_id) >= 10
까지만 생각함 -> 근데 이렇게 하면 실고객의 정보만 얻는 것에서 끝나고 실고객에 해당하는 사람들의 문제에서 원하는 조회항목을 볼 수 없음 그래서 서브쿼리를 해야 하는거임 이 조건에 해당하는 정보를 찾기 위해
1. 실고객 user_id 찾기
2. 1을 가지고 해당 조건에 맞는 사람의 id, user_id, city, state, postal_code, browser, traffic_source, event_type 찾기
SQL 연습문제 10-2
thelook_ecommerce 데이터 세트 - 회원(users) 테이블과 주문(orders) 테이블에서 연령대별(user_count) 회원수와 주문횟수합계(order_count)를 조회하세요.
조회 항목
- 연령대 (age_group)
- 예 : 10대, 20대, 30대, 40대 ~~ 70대
- 참고 함수 trunc : 소수점 버리기
- select trunc(78, -1) || '대' --> 70대
- select trunc(32, -1) || '대' --> 30대
- 회원수(user_count)
- 주문횟수합계 (order_count)
정렬순서
- 연령대 오름차순
얘 잘 모르겠음
SQL 연습문제 10-3
thelook_ecommerce 데이터 세트, 회원(users) 테이블에서
- 가장 많은 회원 나이를 구하고
- 그 나이의 회원들의 정보를 조회하세요.
조회 항목
- 이름(first_name, last_name)
- 주소 정보(state, street_address, city, country)
- 우편 번호(postal_code)
select
first_name,
last_name,
state,
street_address,
city,
country,
postal_code
from `thelook_ecommerce.users`
where age = (
select max(age)
from `thelook_ecommerce.users`
)
age = 이라고 쓸 생각을 못했음 -> in 만 되는 줄
SQL 연습문제 10-4
weniv 데이터 세트에서 모니터를 구입한 회원(user)의 이름(name)과 우편번호(postal_code)를 서브쿼리만 이용하여 조회하시오. (join을 사용하지 않습니다.)
select name, postal_code
from `weniv.weniv_user`
where id in (
select user_id
from `weniv.weniv_order_details`
where PRODUCT_NAME = 'monitor'
)
이건 그냥… details 테이블 써도 되는 줄 알고 푼
select name, postal_code
from `weniv.weniv_user`
where id in (
select user_id
from `weniv.weniv_order`
where product_id in (
select id
from `weniv.weniv_product`
where name = 'monitor'
)
)
SQL 연습문제 10-5
weniv 데이터 세트에서 소울곰(Soulgom)이라는 이름의 회원이 구입한 상품의 데이터를 모두 조회하세요. JOIN을 이용하지 않고 서브쿼리만 써서 해보세요.
select *
from `weniv.weniv_product`
where id in (
select product_id
from `weniv.weniv_order`
where user_id = (
select id
from `weniv.weniv_user`
where name = 'Soulgom'
)
)
user_id = () 랑 in 의 차이는 뭐지?
'AI SCHOOL > SQL' 카테고리의 다른 글
[SQL] 실무 데이터 분석 (0) | 2023.02.10 |
---|---|
[SQL] WITH / 서브쿼리 (0) | 2023.02.02 |
[SQL] 집합 연습문제 (0) | 2023.01.27 |
[SQL] 집합 (0) | 2023.01.27 |
[SQL] JOIN 연습문제 (0) | 2023.01.26 |