본문 바로가기

SQL

PostgreSQL을 이용하여 조건에 따른 부분합을 계산해 보자 (야 너도 SQL 할 수 있어 #1) (2020년 12월 15일 화요일)

Motivation: 아래와 같은 table이 주어졌다고 가정하자. 이를 target end-picture (아래 참고) 처럼 정리하고자 한다. 


Target end-picture


사용 SQL platform: PostgreSQL 13
사용 함수: DROP TABLE, CREATE TABLE, SELECT, sum  
사용 자료형: DATE, VARCHAR, NUMERIC

 

 

목차

/* STEP 0: 준비 작업 */  

/* STEP 1: holdings2 라는 이름을 가진 table을 만든다. 사용 함수는 CREATE TABLE */ 

/* STEP 2: COPY 함수를 이용해 holdings holdings2.csv 파일내 값을 holdings2 table에 복사한다. */ 

/* STEP 3: group by를 사용해 부분합을 계산하자 */ 

 

 

본문
/* STEP 0: 준비 작업 */ 
/* 이번 예제에서 쓸 table 이름 holdings2가 기존에 있다면 삭제하자. 사용 함수는 DROP TABLE () */ 
DROP TABLE holdings2

 

 

/* STEP 1: holdings2 라는 이름을 가진 table을 만든다. 사용 함수는 CREATE TABLE */
/* 사용 자료형 DATE, VARCHAR, NUMERIC */ 
/* 자료형에 대한 설명: Date 날짜형이다. VARCHAR 가변길이 문자열을 의미한다. VARCHAR(50)은 50byte까지 넣을 수 있는 가변길이 문자열을 의미한다. 즉, 영문자 기준으로 50자리까지 넣을 수 있는 자료형이라 여기면 된다. 한글은 2byte를 차지하므로, 한글로만 넣을 경우 25자까지 넣을 수 있다. NUMERIC은 숫자 값이다. NUMERIC(10,3) 이란 뜻은 소수점 3째자리까지 표현하라는 의미이며, 10은 소수점 자리수까지 포함한 총 자리 숫자를 의미한다. 즉, 1243.387은 NUMERIC(7,3)이다. */ 

 

CREATE TABLE holdings2(
Date DATE,
Security_name VARCHAR(50),
Type VARCHAR(50),
local_currency NUMERIC(50, 5),
bm NUMERIC(3),
Asset_type VARCHAR(50),
KRW NUMERIC(50,5)
)

 

 

/* STEP 2: COPY 함수를 이용해 holdings holdings2.csv 파일내 값을 holdings2 table에 복사한다. */ 
COPY holdings2(Date, Security_name, Type, local_currency, bm, Asset_type, KRW)

FROM 'D:\SQL\holdings2.csv' 

DELIMITER ','
CSV HEADER;

 

/* holdings2 table을 출력해 보자 */ 

SELECT * from holdings2

 

원 데이터의 내용들이 postgreSQL내 테이블로 복사된 후, 출력한 모습

 

/* STEP 3: group by를 사용해 부분합을 계산하자 */

SELECT date, bm, sum(krw) /* 3개 변수를 선택한다. date, bm은 원 자료에 있던 column명. sum(krw)은 기존 krw을 조건에 맞춰 (조건 부여: 아래의 group by로 부여됨) 더한다 */


from holdings2 /* 테이블명 'holdings2'에서 가져온다 */


group by date, bm /* 조건 2개를 모두 만족하는 값으로 group 한다 */ 

 

date, bm, sum(krw)을 적용하고 group by date, bm한 결과

 

/* 본래 목표는 date을 ascending order (내림차순) 으로 출력하는 것이니, order by date ASC 를 사용하자 */

SELECT date, bm, sum(krw) 
from holdings2 
group by date, bm 
order by date ASC, bm

 

최종 결과물

 

제목: PostgreSQL을 이용하여 조건에 따른 부분합을 계산해 보자 (야 너도 SQL 할 수 있어 #1) (2020년 12월 15일 화요일) 

 

compute2080.tistory.com