PostgreSQL 프로그램과 Dbeaver 툴로 연습한 기록

 

실행하면서 익혀보자!

 

 

2021년 6월 1일 하루동안의 주문 (자체 연습 데이터)

 

1. 데이터 탐색

각 데이터테이블

 

gmv_trend : 온라인 쇼핑몰거래액 테이블

online_order : 주문 테이블

item : 상품 테이블

category : 카테고리 테이블

user_info : 유저 테이블

 

 

 

 

 

 

2. Top 상품의 매출 확인

1) 상품별 매출액 집계 후, 매출액 높은 순으로 정렬하기

select itemid, sum(gmv) as gmv
from online_order oo
group by 1

online_order oo → online_order as oo와 같다.

따라서 oo : online_order

 

 

2) 상품이름을 상품ID와 나란히 놓아서 한눈에 상품별 매출액을 확인할 수 있도록 하자.

select item_name, sum(gmv) as gmv
from online_order oo
join item i on oo.itemid = i.id 
group by 1
order by 2 desc

→ item테이블을 'i'로 명명하고, item테이블의 'id'컬럼과 online_order테이블의 'itemid'를 Join

여기서 join은 (inner) join과 같다. (교집합)

 

 

3) 카테고리별 매출액은 어떻게 될까? (Join 테이블에 Join을 한번 더)

select c.cate1, c.cate2, c.cate3, sum(gmv) as gmv
from online_order oo 
join item i on oo.itemid = i.id 
join category c on i.category_id = c.id 
group by 1,2,3
order by 4 desc;

join테이블에 join을 한번 더!

 

 

4) 성/연령별 매출액은 어떻게 될까?

select gender, age_band, sum(gmv) as gmv
from online_order oo 
join user_info ui on oo.userid = ui.userid 
group by 1,2
order by 1,2;

online_order의 userid가 null값인 경우가 있으면, 어떻게 조인이 될 것인가? -> 이론수업때*

 

 

5) 만약 두개의 테이블에 컬럼명이 같다면(userid), 어떻게 써주어야하나?

select user_info.userid
from online_order oo 
join user_info ui on oo.userid = ui.userid
select oo.userid
from online_order oo 
join user_info ui on oo.userid = ui.userid

select구문에 테이블명.컬럼명을 정확히 사용해주어야 한다.

 

 

3. Top 상품의 매출 확인

1) 남성이 구매하는 아이템은 어떤 것이 있을까?

select i.item_name, sum(gmv) as gmv
from online_order oo 
join user_info ui  on oo.userid = ui.userid 
join item i on oo.itemid = i.id 
where gender = 'M'
group by 1
order by 2 desc;

★ select > from > join > where > group by > order by 순서 명확히!!

 

 

※ Join의 유형

select ui.gender, ui.age_band, sum(gmv) as gmv
from online_order oo 
join user_info ui on oo.userid = ui.userid 
group by 1,2
order by 1,2;

 

위에서 설명했듯, 그냥 join만 쓰는 것은 inner join과 같다. 이때 누락되는 값이 생길 수 있다.

 

 

 

 

 

 

select ui.gender, ui.age_band, sum(gmv) as gmv
from online_order oo 
left join user_info ui on oo.userid = ui.userid 
group by 1,2
order by 1,2;

 

left join을 사용하여 얻은결과를 보면, 누락되었던 값이 null로 표기되는 것을 볼 수 있다.

 

join의 대한 개념은 다음 포스트에서 다룬다. 

 

 

'SQL' 카테고리의 다른 글

SQL 실습 ③ 데이터 가공하기  (0) 2023.03.07
SQL Join의 유형 / 주의사항  (0) 2023.03.02
SQL 주의사항  (0) 2023.02.28
SQL 기본 문법  (0) 2023.02.28
SQL 실습 ① 거래액 데이터 분석  (0) 2023.02.28

+ Recent posts