SQL/SQL Note

패스트캠퍼스 SQL 복습

hoonssss 2023. 8. 17. 09:28
반응형
SMALL
--실습 1) 거래액 데이터 분석
--2017년부터 2021년 3월까지의 전자상거래 추정거래액 (단위 : 백만원)
--내 회사의 거래액 데이터라고 생각해도 됨

--1) 데이터 탐색--------------------------------------------------------------

--STEP 1) 모든 컬럼 추출하기
select *
from gmv_trend gt 
;
--STEP 2) 특정 컬럼 추출하기
select yyyy,mm,gmv
from gmv_trend gt 
;

--STEP 3) 중복값 없이 특정 컬럼 추출하기
select distinct yyyy,gmv
from gmv_trend gt 
;

--2) 특정 연도의 매출 탐색--------------------------------------------------------------
select category,yyyy 
from gmv_trend gt 
where yyyy between 2018 and 2020
;
--where yyyy >= 2018

--2-1) 조건이 하나일 때 More Example
------a) 숫자열 (between, 대소비교)
select *
from gmv_trend gt 
where yyyy between 2016 and 2020
;
select *
from gmv_trend gt 
where yyyy >= 2018
;
select *
from gmv_trend gt 
where yyyy != 2020
;
select *
from gmv_trend gt 
where yyyy <> 2020
;
------b) 문자열 (=, !=, like, in, not in)
select *
from gmv_trend gt 
where category = '컴퓨터 및 주변기기'
;
select *
from gmv_trend 
where category in ('컴퓨터 및 주변기기','생활용품')
--2개 이상은 in으로 연결
;
select *
from gmv_trend 
where category not in ('컴퓨터 및 주변기기','생활용품')
;
select*
from gmv_trend gt 
where category like '%패션%'
;
select*
from gmv_trend gt 
where category like '%패션%'
;
--2-2) 조건이 여러개일 때--------------------------------------------------------------
------a) and 조건
select *
from gmv_trend gt 
where category = '컴퓨터 및 주변기기' and yyyy = 2017 
;
select *
from gmv_trend gt 
where category = '컴퓨터 및 주변기기' and yyyy = '2017'
;
select *
from gmv_trend gt 
where gmv > 1000000 or gmv < 10000
;
select *
from gmv_trend gt 
where (gmv > 1000000 or gmv < 10000) and yyyy = 2021
;
--or and 혼합 사용시 구분 괄호 표시

--3) 카테고리별 매출 분석--------------------------------------------------------------

--More Example) 카테고리별, 연도별 매출

select category ,yyyy , sum(gmv)
from gmv_trend gt 
group by category ,yyyy 

--집계함수 이외의 컬럼을 모두 group by 
;
select distinct (category), yyyy, sum(gmv)
from gmv_trend gt 
where category in ('서적','신발')
group by category , yyyy -- 1,2 
;
select distinct (category), yyyy, sum(gmv)
from gmv_trend gt 
where category in ('서적','신발')
group by 1,2 
--집계 함수는 보통 마지막에 넣고 group by 집계함수 전까지 숫자 처리
;
--category 중복값 제외, 서적, 신발만의 gmv 합계
select distinct category , sum(gmv) 
from gmv_trend gt 
where category in ('서적','신발')
group by category 
;
--More Example) 전체 총합
select sum(gmv) as gmv, max(yyyy), min(yyyy), avg(gmv)
from gmv_trend

--전체를 집계할때 group by X, where시 group by 기억.
;
--More Example) 집계함수의 종류
sum,min,max,avg

--group by + where 예시
select category, yyyy , sum(gmv)  
from gmv_trend gt 
where category = '컴퓨터 및 주변기기'
group by 1,2
order by yyyy desc 


--4)매출이 높은 주요 카테고리만 확인하기--------------------------------------------------------------
select category, sum(gmv) as gmv
from gmv_trend gt
group by 1
having sum(gmv)>=100000000
order by gmv desc 

select category, sum(gmv) as gmv
from gmv_trend gt
where sum(gmv) >= 10000000
group by 1
order by gmv desc 
--집계함수는 where절에서 사용 불가, 집계함수는 having절에서만 가능

--More Example) where절이랑 같이 쓰기
select category, sum(gmv) as gmv 
from gmv_trend gt 
where yyyy = 2020
group by 1
having sum(gmv) >= 10000000
order by gmv desc 
;
--5) 매출이 높은 순으로 카테고리 정렬하기--------------------------------------------------------------
--내림차순 Example
select category ,sum(gmv) as gmv
from gmv_trend gt 
group by 1
order by gmv desc 
;
select *
from gmv_trend gt 
order by category ,yyyy ,mm desc, platform_type (1,2,3 desc,4 )
;
select category ,yyyy ,sum(gmv) as gmv
from gmv_trend gt
group by 1,2
order by 1,2(1,3 desc)
--[추가 예제 1] 복수의 컬럼으로 정렬
select yyyy,mm,sum(gmv) as gmv 
from gmv_trend gt2 
group by 1,2
order by 3 desc 

--[추가 예제 2] select 절에 없는 컬럼으로 정렬 가능할까? -> 불가능

select category, sum(gmv) as gmv

from gmv_trend gt

where sum(gmv) >= 10000000

group by 1

order by gmv desc

-- 위 문장은 틀린 문장 집계함수는 where절에서 사용 불가, 집계함수는 having절에서만 가능

--haveing절은 집계 후 데이터를 필터링 하기 때문에 집계함수만 가능

--where절은 집계 전 데이터를 필터링 하기 때문에 집계함수 X

select category, sum(gmv) as gmv

from gmv_trend gt

group by 1

having sum(gmv) >= 10000000

order by gmv desc

-- 위 문장이 맞는 문장 group by 절 밑에 having절 입력

-- where gmv >= 100000000 불가능

집계함수 사용시 ex) select a, b, sum(c) as c

select 집계함수 전까지 group by 설정 ex) group by 1,2 or group by a,b

반응형
LIST

'SQL > SQL Note' 카테고리의 다른 글

count(*), count(age)  (0) 2023.08.17
LIKE '%~%', Group by  (0) 2023.08.17
조회 조건, count 조건, hour, null  (2) 2023.08.17
SQL실행 순서, select 컬럼명, where 절 조건  (0) 2023.08.17
SQL join 기본  (0) 2023.08.16