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

 

기본적인 SQL 구문은 일단 패스, 실행하면서 익혀보자!

 

2017년부터 2021년 3월까지의 전자상거래 추정거래액 (단위 : 백만 원)

데이터 출처 : https://kosis.kr/ (온라인 쇼핑몰 거래액)

 

1) 데이터 탐색

- Dbeaver tool로 PostgreSQL과 연결하여 작업하였다.

- 국가 통계포털 Kosis의 온라인 쇼핑몰거래액 테이블 이름 gmv_trend 

 

 

 

 

 

 

 

STEP 1) 모든 컬럼 추출하기

select *
from gmv_trend

 

 *  는 '모든 컬럼'을 의미한다.

 

 gmv_trend 테이블의 모든 컬럼을 보여주라는 코드다!

 

 

 

 

 

 

 

STEP 2) 특정 컬럼 추출하기

select category, yyyy, mm
from gmv_trend

→ gmv_trend 테이블의 컬럼 category, yyyy, mm 추출하기

 

 

STEP 3) 중복값 없이 특정 컬럼 추출하기

select distinct category
from gmv_trend

컬럼명 앞에 'distinct' 를 붙이면, 같은 이름(=같은 값)을 배제한다. (중복배제)

 

 

 

2) 특정 연도의 매출 탐색

2-1) 조건이 하나일 때 More Example

a) 숫자열 (between, 대소비교 =, !=, >, <, >=, <=, <>)

select *
from gmv_trend
where yyyy = 2021

 

'where' 은 조건문!!

where yyyy >= 2019   → 2019년도 이상의 데이터 추출

where yyyy != 2021  2021년이 아닌 년도의 데이터 추출 

where yyyy <> 2021  → '!=' 연산과 같다. '같지않음'을 뜻하는 연산자

 

select *
from gmv_trend
where yyyy between 2018 and 2020

between 2018 and 2020 → 2018년 이상 2020년 이하의 데이터 추출하라는 의미

 

 

b) 문자열 (like, in, not in)

select *
from gmv_trend
where category in ('컴퓨터 및 주변기기', '생활용품')

where category in ('컴퓨터 및 주변기기', '생활용품')

→ category 컬럼의 값이 '컴퓨터 및 주변기기', '생활용품' 인 것들을 추출

 

where category not in ('컴퓨터 및 주변기기', '생활용품')

→ category 컬럼의 값이 '컴퓨터 및 주변기기', '생활용품' 인 것이 아닌 것들을 추출

 

where category like '%패션%'

→ category 컬럼의 값에 '패션'이라는 글자가 들어가는 값들을 추출

★ '%'기호는 어떠한 글자를 의미하는데, '~~~패션' = '%패션' 과 같고, '패션~~~' = '패션%' 과 같이 표현할 수 있다.

 

 

2-2) 조건이 여러개일 때

a) and 조건

select *
from gmv_trend
where category = '컴퓨터 및 주변기기'
and yyyy = 2020

 

b) or 조건

select *
from gmv_trend
where gmv > 1000000 or gmv < 50000

 

c) and, or 조건 혼용 --> ( )로 확실히 분리하자! 

select *
from gmv_trend
where gmv > 1000000 or gmv < 50000 and yyyy = 2021 -- X

→ 의미가 달라질 수 있기 때문이다. 되도록이면 괄호를 이용하여 확실하게 구분하자.

select *
from gmv_trend
where (gmv > 1000000 or gmv < 50000) and yyyy = 2021 -- O

 

 

3) 카테고리별 매출 분석

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

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

→ Select 구문에 집계함수 'sum'을 사용할 수 있다.  ex) sum(컬럼명)

→ 집계함수는 거의 통상적으로 셀렉트 구문의 맨 뒤에 쓴다!

 

★ Select 구문에 집계함수를 사용하면, Group by를 해주어야 한다. (집계함수를 사용한 컬럼 빼고)

→  '그룹'으로 묶어서 통계를 내는 것이라 생각!!

 

→ sum 집계함수를 사용함에 있어서 추출한 데이터 테이블의 컬럼명이 'sum'으로 변한 것을 볼 수 있다.

★ 추출한 데이터 테이블의 컬럼명을 바꿔주는 방법

ex)  sum(gmv) as total_gmv   ex) sum(gmv) total_gmv

ex) sum(gmv) "total_gmv"

 

 

 

 

 

 

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

→ 'group by' 구문에 컬럼의 순서를 적어주어도 된다. (컬럼명이 조잡하거나, 중간에 수정을 할 때 간단하다)

 

 

More Example) 전체 총합

select sum(gmv) as gmv, min(yyyy), max(yyyy), avg(gmv)
from gmv_trend

→ 이런 경우(전체 총합을 구할 때)는 group by를 쓰지 않는다. (어차피 집계된 데이터테이블의 행은 하나다.)

 

cf) 집계함수의 종류

sum / min / max / avg      → 이정도만 알아도 실무에 거의 지장이 없다!

(합 / 최솟값 / 최댓값 / 평균값)

 

 

More Example)  groupby + where 절 예시

select category, yyyy, sum(gmv) as gmv
from gmv_trend
where category = '컴퓨터 및 주변기기'
group by 1, 2

★ from -> where -> group by 순으로 와야한다! 

 

 

4)매출이 높은 주요 카테고리만 확인하기

select category, sum(gmv) as gmv
from gmv_trend
group by 1
having sum(gmv) >= 50000000

having절 : "집계 후" 데이터를 필터링

 

 

--More Example) where절이랑 같이 쓰기

select category, sum(gmv) as gmv
from gmv_trend
where yyyy = 2020 --where절: "집계 전"데이터를 필터링
group by 1
having sum(gmv) >= 10000000
-- 따라서, where절에는 집계함수가 올 수 없고, having절에는 집계함수만 올 수 있다.

where : "집계 후" 데이터를 필터링

★ 따라서, where절에는 집계함수가 올 수 없고, having절에는 집계함수만 올 수 있다!

 

 

5) 매출이 높은 순으로 카테고리 정렬하기 (order by)

select category, sum(gmv) as gmv
from gmv_trend
group by 1
order by gmv desc

asc : 오름차순, desc : 내림차순

★ order by 에 쓰이는 컬럼은 select 절에 있는 컬럼만 가능하다

 

 

복합 Example

select category, yyyy, sum(gmv)
from gmv_trend
group by 1,2
order by 1 asc, 3 desc

→ category 명은 오름차순, sum(gmv)는 내림차순으로 추출

 

--[추가 예제 1] 복수의 컬럼으로 정렬

select yyyy, mm, sum(gmv) as gmv
from gmv_trend
group by 1,2
order by 3 desc

'SQL' 카테고리의 다른 글

SQL Join의 유형 / 주의사항  (0) 2023.03.02
SQL 실습 ② 주문 데이터 분석 (join 이용)  (0) 2023.03.02
SQL 주의사항  (0) 2023.02.28
SQL 기본 문법  (0) 2023.02.28
'SQL'이란?  (0) 2023.02.27

+ Recent posts