데이터 탐색

거래액 데이터 분석

  • 2017년부터 2021년 3월까지의 전자상거래 추정거래액( 단위 : 백만원 )
  • 내 회사의 거래액 데이터라고 생각 해도 됨

데이터 탐색

# 모든 컬럼 추출하기
select *
from gmv_trend

# 특정 컬럼 추출하기
select category, yyyy, mm, gmv
from gmv_trend

# 중복값 없이 특정 컬럼 추출하기
select distinct category
from gmv_trend

select distinct yyyy, mm
from gmv_trend

# 특정 연도의 매출 탐색
## yyyy가 2021인 조건을 탐색
select *
from gmv_trend
where yyyy=2021

조건 절

-- # INT
-- ## yyyy가 2019년 이후 부터 출력
select *
from gmv_trend
where yyyy >= 2019

-- ## yyyy가 2018 ~ 2019년까지의 데이터를 보고 싶다면
select *
from gmv_trend
where yyyy between 2018 and 2020

-- ## yyyy의 2021를 제외한 데이터
select *
from gmv_trend
where yyyy != 2021

-- ## 위의 연산자와 비슷하다
-- ### 같지 않음 이라는 뜻을 가집니다.
select *
from gmv_trend
where yyyy <> 2021

-- # STRING

-- ## 조건이 참 일때
select * 
from gmv_trend
where = category = '컴퓨터 및 주변기기'

-- ## 해당 조건 제외
select * 
from gmv_trend
where = category != '컴퓨터 및 주변기기'

-- ## 조건이 두개일 때
select *
from gmv_trend
where category in ('컴퓨터 및 주변 기기', '생활용품')

-- ## 만약 여러개를 제외할 경우는
select *
from gmv_trend
where category not in ('컴퓨터 및 주변 기기', '생활용품')

-- ## 포함 단어 추출
select * 
from gmv_trend
where category like '%패션%'
-- # %를 통해서 해당 위치 기준 앞뒤 아무 글자가 들어가는지에 대한 의미

조건이 여러 개 일 때 SQL 문

-- 두 개의 조건이 모두 충족된 교집합일 때만 출력
select * 
from gmv_trend
where = category = '컴퓨터 및 주변기기'        
and yyyy = 2021

-- or 조건
select *
from gmv_trend
where gmv > 100000 or gmv < 10000

--- and와 or 혼용 가능
-- 혼용은 가능하나, 내가 의도한 대로 ( ) 소괄호로 묶어어야한다.
select *
from gmv_trend
where (gmv > 1000000 or gmv < 10000) and yyyy = 2021

group

-- gmv를 그룹핑한다. category와 yyyy 대조하여, 비슷하면 gmv 데이터를 sum 한다. 
select category, yyyy, sum(gmv)
from gmv_trend
group by category, yyyy

-- 위와 같이 하면, sum이라는 컬럼명이 나오기에, 해당 부분의 이름을 변경하기 위해 as 를 붙인다.
-- 다른 컬럼도 as를 써서 적용 가능함 // as는 생략 가능, 만약 예약어라면 ""를 써야함
select category, yyyy, sum(gmv) as total_gmv
from gmv_trend
group by category, yyyy

-- group by 자체는 문법이기에, sum 처럼 group을 하지 않는 요소들을 필수적으로 적어야 한다.
-- 컬럼을 매번 쓰기 힘드니 숫자로 표현도 가능하다.
select category, yyyy, sum(gmv) total_gmv
from gmv_trend
group by 1,2

-- 전체 집계 함수일 대는 group by를 하지 않는다.
select sum(gmv) as gmv, min(yyyy), max(yyyy), avg(gmv)
from gmv_trend

-- 특정 컬럼의 group을 뽑으려면
select category, yyyy, sum(gmv) as gmv
from gmv_trend
where category = '컴퓨터 및 주변기기'
group by 1,2

-- 매출이 높은(특정 매출액 이상) 주요 카테고리만 확인
select category, sum(gmv) as gmv
from gmv_trend
group by 1
having sum(gmv) >= 1000000
WHERE과 HAVING의 차이점

  • where : 집계 전 데이터를 필터링
  • having: 집계 후 데이터를 필터링

정렬

-- 오름차순 년도 순으로 정렬하기
select *
from gmv_trend
order by yyyy

-- 카테고리 별, 년도별, 월 별 각각 정렬
select *
from gmv_trend
order by category, yyyy, mm, platform_type 

-- 매출액이 높은 순서로 정렬
select category, sum(gmv) as gmv
from gmv_trend
group by 1
order by gmv desc

-- 카테고리는 오름차순, 년도 내림차순 
select category, yyyy, sum(gmv) as gmv
from gmv_trend
group by 1,
order by 1, 2 desc

SQL의 명령어 순서

Pasted image 20240229090526.png

limit

  • SQL의 행이 너무 많을 때는 해당 행을 통해서 SQL문을 줄여서 보는 걸 합니다.

SQL 기본 이론

Select 절에서 주의 사항

select절에서 가장 많이 하는 실수

  • 컬럼명을 새로 명명할 경우
  • 띄어쓰기, 숫자로 시작하는 단어, 특수문자 포함 단어는 올 수 없다.
  • 단 아래의 상황은 예외이다.

SELECT category as "cate gory", gmv as "2021_gmv", mm as "#mm"
FROM gmv_trend
WHERE yyyy = 2021
ORDER BY mm

WHERE 절에서 주의 사항

긍정 부정 의미
= !=, <> 일치/불일치 조건
>, >=, <, <= 대소 조건(보통 숫자와 많이 씀)
between ~ and ~ not between ~ and b 범위 조건(보통 숫자와 많이 씀)
in( ~, ~, ~) not in(~, ~) 다수의 값 일치/불일치 조건
like '%~%' not like %~% 특정 문자열 포함/불 포함 조건
ilike '%~%' not ilike '%~%' 위와 동일, 영어인 경우 알파벳 대소문자 구분 안함
is null is not null null 값 포함 / 제외 조건
where절에 and와 or 를 함께 쓸때는, 반드시 ()로 의미 단위를 묶는다

Pasted image 20240229102725.png

Group by의 주의사항

Select 절에 등장한 컬럼이 group by에 모두 명시되지 않는 경우

Pasted image 20240229103233.png

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

실제 매출 데이터?

! 600

위 내용으로 어떤 데이터를 추출 할 수 있는가?

Pasted image 20240229104545.png


#SQL