[PostgreSQL초격차] _1_거래액 데이터 분석 (Select, From, Where, Group by, Order by, Having)

Hyejin Beck·2024년 1월 5일
0

데이터베이스(SQL)

목록 보기
4/40

온라인쇼핑동향조사>온라인쇼핑몰 판매매체별/상품군별거래액
실습데이터 : 2017년부터 2021년 3월까지의 전자상거래 추정거래액 (단위, 백만원)

수업

--------------------------------- 1. 데이터 탐색 

--gmv_trend 테이블의 모든 데이터값을 추출 
select * 
from gmv_trend;

--gmv_trend 테이블에서 카테고리, 년도, 월, 매출액 데이터만 추출 
select category, yyyy, mm, gmv
from gmv_trend

--gmv_trend 테이블에서 중복값 제거된 카테고리 고유의 값만 추출 
select distinct category
from gmv_trend    

--gmv_trend 테이블에서 중복값 제거된 년도, 월별 고유의 값만 추출 
select distinct yyyy, mm
from gmv_trend

--------------------------------- 2. 특정 데이터 탐색 
--gmv_trend 테이블에서 2021년도 데이터만 추출 
select * 
from gmv_trend
where yyyy = 2021

--gmv_trend 테이블에서 2018년 이후 데이터만 추출 
select * 
from gmv_trend
where yyyy >= 2019

--gmv_trend 테이블에서 2018년~2020년 사이의 데이터만 추출
select * 
from gmv_trend
where yyyy between 2018 and 2020
--또는 where yyyy >= 2018 and yyyy <= 2020 

--gmv_trend 테이블에서 2021년 데이터를 제외하고 추출하는 2가지 방법 
select * 
from gmv_trend
where yyyy != 2021

select * 
from gmv_trend
where yyyy <> 2021

--gmv_trend 테이블에서 카테고리가 "컴퓨터 및 주변기기" 데이터만 추출  
select * 
from gmv_trend 
where category = '컴퓨터 및 주변기기'

--gmv_trend 테이블에서 카테고리가 "컴퓨터 및 주변기기" 데이터만 제외하고 추출 
select * 
from gmv_trend 
where category <> '컴퓨터 및 주변기기' 

--gmv_trend 테이블에서 카테고리가 "컴퓨터 및 주변기기", "패션용품 및 액세서리" 데이터만 추출 (or,and 사용 불가) 
select * 
from gmv_trend 
where category in ('컴퓨터 및 주변기기' , '패션용품 및 액세서리' )

--gmv_trend 테이블에서 카테고리가 "컴퓨터 및 주변기기", "패션용품 및 액세서리" 데이터만 제외하고 추출 (or,and 사용 불가) 
select * 
from gmv_trend
where category not in ('컴퓨터 및 주변기기' , '패션용품 및 액세서리' )

--gmv_trend 테이블에서 카테고리에 "서비스" 단어가 포함되어 있는 모든 데이터만 추출 
select * 
from gmv_trend 
where category  like '%서비스%'

--gmv_trend 테이블에서 카테고리에 "패션" 단어가 포함되어 있지 않는 모든 데이터만 추출
select * 
from gmv_trend 
where category  not like '%패션%'

--gmv_trend 테이블에서 카테고리가 "컴퓨터 및 주변기기" 인 2021년도 데이터만 추출 
select * 
from gmv_trend
where category = '컴퓨터 및 주변기기' and yyyy = 2021

--gmv_trend 테이블에서 거래액이 아주 크거나 아주 작은 데이터만 추출 (1000000 이상 또는 10000) 
select * 
from gmv_trend
where gmv >= 1000000 or gmv <= 10000 

--gmv_trend 테이블에서 거래액이 아주 크거나 아주 작은 데이터만 2021년도에 한해서 추출 (1000000 이상 또는 10000) 
select * 
from gmv_trend 
where (gmv >= 1000000 or gmv <= 10000) and yyyy = 2021
-- or와 and가 함께 있을땐 and 먼저 계산되기 때문에 (괄호)를 사용해야한다. 

--------------------------------- 3. 그룹별 매출 분석 
-- 외우자! ㅁㅁ별 000를 보고 싶을 땐 
-- ㅁㅁ별에는 group by를 select 순서대로 입력해줘야 하고 
-- 000에는 sum(), min()과 같이 집계 함수가 필요하다! 
-- 순서 : select > from > where(집계 전 필터링) > group by > having(집계 후 필터링)

--gmv_trend 테이블에서 카테고리별, 년도별 매출 추출 (카테고리 컬럼명은 "카테고리", 년도 컬럼명은 "년도", 매출액 컬럼명은 "매출액"으로)
select category 카테고리 , yyyy 년도, sum(gmv) 매출액 
from gmv_trend 
group by category , yyyy
--명칭 쓸 때 일반적으로 as를 사용하지만, 없어도 됩니다.
 
--group by 에서는 명칭이 아닌 본래의 이름으로 적거나 1,2 처럼 숫자화 하여도 select 있는 순서대로 지정하여 진행됩니다.  
select category 카테고리 , yyyy 년도, sum(gmv) 매출액 
from gmv_trend 
group by 1,2 

--gmv_trend 테이블에서 매출 합계만 추출  
select sum(gmv) 
from gmv_trend

--gmv_trend 테이블에서 매출 합계, 매출 최소금액, 매출 최대금액, 매출 평균액(소숫점없게 반올림) 추출 
select sum(gmv) , min(gmv), max(gmv), round(avg(gmv),0)
from gmv_trend

--gmv_trend 테이블에서 카테고리가 '컴퓨터 및 주변기기'인 년도별 매출 
select category, yyyy, sum(gmv) 
from gmv_trend 
where category = '컴퓨터 및 주변기기' 
group by 1,2 

--gmv_trend 테이블에서 2018년~2020년의 카테고리별 매출 평균금액(소숫점없게 반올림)
select category , yyyy, round(avg(gmv) ,0) 
from gmv_trend 
where yyyy between 2018 and 2020 
group by 1,2 

--gmv_trend 테이블에서 2018~2020년 카테고리별 매출 합계 (소숫점없게 반올림) 단, 합계가 15,000,000 이상인 경우만 
select category , yyyy, round(sum(gmv) ,0) 
from gmv_trend 
where yyyy between 2018 and 2020 
group by 1,2 
having sum(gmv) >= 15000000

--gmv_trend 테이블에서 년도순으로 전체 정렬 
select * 
from gmv_trend
order by yyyy

--gmv_trend 테이블에서 년도순 + 월별 + 플랫폼타입전체 정렬 
select * 
from gmv_trend
order by yyyy,mm, platform_type 

--gmv_trend 테이블에서 매출 높은 순으로 카테고리 정렬 
select category, sum(gmv) as gmv
from gmv_trend
group by 1 
order by gmv desc -- 위에 sum(gmv) 에 as gmv를 해줘야 합니다. 

--gmv_trend 테이블에서 카테고리별 년도별 매출액 합계(최신년도 먼저 오게)   
select category , yyyy, sum(gmv)
from gmv_trend
group by 1,2 
order by 1,2 desc   -- 2번째 yyyy를 desc 로 정렬 

--gmv_trend 테이블에서 카테고리별 년도별 매출액 합계를 (최신년도 먼저 + 매출액합계 가장 높은 금액 먼저)
select category, yyyy, sum(gmv)
from gmv_trend
group by 1,2 
order by 2 desc , 3 desc 

--gmv_trend 테이블에서 최신년도, 최신월에 따른 최고 매출 합계와 카테고리 
select yyyy, mm, sum(gmv) , category 
from gmv_trend
group by 1,2,4
order by 1 desc, 2 desc, 3 desc 

--gmv_trend 테이블에서 년도별 매출액 평균 (평균매출액 높은 순서대로 + 소숫점 없게 반올림)
select yyyy, round(avg(gmv),0)
from gmv_trend 
group by 1 
order by 2 desc 

--gmv_trend 테이블에서 년도별 매출액 평균 (평균매출액 높은 순서대로 + 소숫점 없게 반올림) top 3 
select yyyy, round(avg(gmv),0)
from gmv_trend 
group by 1 
order by 2 desc 
limit 3 

--gmv_trend 테이블의 데이터를 5rows만 
select * 
from gmv_trend
limit 3

메모

  • or와 and가 함께 있을땐 and 먼저 계산되기 때문에 (괄호)를 사용해야한다.
  • 목차에 있는 내용을 질문만 보고 다시 한번 복기합니다.
  • 외우자! ㅁㅁ별 000를 보고 싶을 땐
    • ㅁㅁ별에는 group by를 select 순서대로 입력해줘야 하고
    • 000에는 sum(), min()과 같이 집계 함수가 필요하다!
  • 순서 : select > from > where(집계 전 필터링) > group by > having(집계 후 필터링)
  • 명칭 쓸 때 일반적으로 as를 사용하지만, 없어도 됩니다. (단 띄어쓰기, 숫자로 시작, 특수문자 포함 되는 경우는 "" 있어야 합니다.)
  • 수학점수가 70점 이상이거나 과학점수가 65점 이상이면서, 통계학과 이여야해.
    • ( 수학점수 >= 70 or 과학점수 >= 65) and 학과 = "통계학과"
  • Where절에는 집계함수 (sum, avg, min 등) 은 사용할 수 없습니다.
    • Group by, Having 에 집계함수를 씁니다.

Where과 Having의 차이

group by로 집계함수에 대한 필터링 = Having
집계 전 필터링 = Where




복습

--------------------------------- 1. 데이터 탐색 

--gmv_trend 테이블의 모든 데이터값을 추출 


--gmv_trend 테이블에서 카테고리, 년도, 월, 매출액 데이터만 추출 


--gmv_trend 테이블에서 중복값 제거된 카테고리 고유의 값만 추출 


--gmv_trend 테이블에서 중복값 제거된 년도, 월별 고유의 값만 추출 


--------------------------------- 2. 특정 데이터 탐색 
--gmv_trend 테이블에서 2021년도 데이터만 추출 


--gmv_trend 테이블에서 2018년 이후 데이터만 추출 


--gmv_trend 테이블에서 2018년~2020년 사이의 데이터만 추출하는 2가지 방법


--gmv_trend 테이블에서 2021년 데이터를 제외하고 추출하는 2가지 방법 


--gmv_trend 테이블에서 카테고리가 "컴퓨터 및 주변기기" 데이터만 추출  


--gmv_trend 테이블에서 카테고리가 "컴퓨터 및 주변기기" 데이터만 제외하고 추출 


--gmv_trend 테이블에서 카테고리가 "컴퓨터 및 주변기기", "패션용품 및 액세서리" 데이터만 추출 (or,and 사용 불가) 


--gmv_trend 테이블에서 카테고리가 "컴퓨터 및 주변기기", "패션용품 및 액세서리" 데이터만 제외하고 추출 (or,and 사용 불가) 


--gmv_trend 테이블에서 카테고리에 "서비스" 단어가 포함되어 있는 모든 데이터만 추출 


--gmv_trend 테이블에서 카테고리에 "패션" 단어가 포함되어 있지 않는 모든 데이터만 추출


--gmv_trend 테이블에서 카테고리가 "컴퓨터 및 주변기기" 인 2021년도 데이터만 추출 


--gmv_trend 테이블에서 거래액이 아주 크거나 아주 작은 데이터만 추출 (1000000 이상 또는 10000) 


--gmv_trend 테이블에서 거래액이 아주 크거나 아주 작은 데이터만 2021년도에 한해서 추출 (1000000 이상 또는 10000) 


--------------------------------- 3. 그룹별 매출 분석 
--gmv_trend 테이블에서 카테고리별, 년도별 매출 추출 (카테고리 컬럼명은 "카테고리", 년도 컬럼명은 "년도", 매출액 컬럼명은 "매출액"으로)

 
--group by 에서는 명칭이 아닌 본래의 이름으로 적거나 1,2 처럼 숫자화 하여도 select 있는 순서대로 지정하여 진행됩니다.  


--gmv_trend 테이블에서 매출 합계만 추출  


--gmv_trend 테이블에서 매출 합계, 매출 최소금액, 매출 최대금액, 매출 평균액(소숫점없게 반올림) 추출 


--gmv_trend 테이블에서 카테고리가 '컴퓨터 및 주변기기'인 년도별 매출 

--gmv_trend 테이블에서 2018년~2020년의 카테고리별 매출 평균금액(소숫점없게 반올림)


--gmv_trend 테이블에서 2018~2020년 카테고리별 매출 합계 (소숫점없게 반올림) 단, 합계가 15,000,000 이상인 경우만 


--gmv_trend 테이블에서 년도순으로 전체 정렬 


--gmv_trend 테이블에서 년도순 + 월별 + 플랫폼타입전체 정렬 


--gmv_trend 테이블에서 매출 높은 순으로 카테고리 정렬 


--gmv_trend 테이블에서 카테고리별 년도별 매출액 합계(최신년도 먼저 오게)   


--gmv_trend 테이블에서 카테고리별 년도별 매출액 합계를 (최신년도 먼저 + 매출액합계 가장 높은 금액 먼저)


--gmv_trend 테이블에서 최신년도, 최신월에 따른 최고 매출 합계와 카테고리 


--gmv_trend 테이블에서 년도별 매출액 평균 (평균매출액 높은 순서대로 + 소숫점 없게 반올림)


--gmv_trend 테이블에서 년도별 매출액 평균 (평균매출액 높은 순서대로 + 소숫점 없게 반올림) top 3 


--gmv_trend 테이블의 데이터를 5rows만 

profile
데이터기반 스토리텔링을 통해 인사이트를 얻습니다.

0개의 댓글

관련 채용 정보