데이터 탐색
거래액 데이터 분석
- 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: 집계 후 데이터를 필터링
- 따라서 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
- 기본적으로 select 절에 있는 것만 정렬이 가능합니다.
SQL의 명령어 순서
order by
는 select 절에 없는 부분은 적용되지 않는 부분이 위의 순서 때문입니다.
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 를 함께 쓸때는, 반드시 ()로 의미 단위를 묶는다
Group by의 주의사항
Select 절에 등장한 컬럼이 group by에 모두 명시되지 않는 경우
select category, yyyy, sum(gmv) as gmv
from gmv_trend
group by category
실제 매출 데이터?
! 600