이전 글에서는 LEAD 분석함수를 사용해 삼성전자의 등락률을 구했습니다.
- https://sweetquant.tistory.com/299
오늘은 등락률 컬럼을 추가해 미리 계산해 넣으려고 합니다. 이 과정중에서 말씀드리고 싶은 내용은 다음과 같습니다.
- 미리 계산된 컬럼을 추가할 때 주의할 점
- 테이블 구조 변경시 항상 ERD를 먼저 변경할 것
등락률은 주가 분석에 빈번하게 사용됩니다. 분석에 자주 사용되는 정보를 분석함수를 사용해서 처리해야 한다면 SQL이 길어지고 복잡해집니다. 그러므로 데이터가 변할 가능성이 지극히 적고, 자주 사용된다면 컬럼을 추가해 미리 값을 계산해서 놓는 것이, SQL 작성에도 유리하며 성능상에서도 큰 이득이 있습니다.
이처럼 컬럼을 추가해 미리 값을 계산해 놓을때는 아래와 같은 사항이 중요합니다.
1. 데이터가 변할 가능성이 지극히 적어야 한다.
2. 데이터가 변경되면 미리 계산된 값도 같이 처리해야 한다는 점을 데이터 관리자가 잘 알고 있어야 한다.
무엇보다도 2번의 사항이 중요합니다. 데이터 변경이 발생했는데, 미리 계산된 값을 변경하지 않는다면 이는 데이터 불일치로 인해 사용자로 하여금 시스템의 불신을 만들 수 있게 됩니다. 실제 현장에서도 미리 계산된 값을 컬럼으로 추가해야 한다면 이 부분에 주의를 기울이시기 바랍니다.
등락률 컬럼을 추가하는 일은 어렵지 않습니다. 테이블에 ALTER문만 사용하면 됩니다. 하지만, 여기서 프로세스상 중요한 것은 반드시 ERD를 먼저 수정하는 것입니다. 현장에서 오래 일하다 보면, 다양한 이유로 ERD 변경 없이 테이블을 직접 변경하는 경우가 생깁니다. (귀찮거나, 바쁘거나, 또는... 귀찮거나.. 귀찮아서... 귀찮아서...) 이처럼 작업을 진행하다 보면 ERD와 실제 테이블간에 차이점이 생기기 시작하고 나중에 손대기 복잡해질 수 있습니다.
또한, ERD를 먼저 열어서 변경하다 보면, 혹시나 비슷한 작업을 한 적이 있는지도 알 수 있으며, 변경할 작업이 다른 테이블에 영향을 주는지도 살펴볼 수 있습니다. 반드시 ERD를 먼저 변경하는 습관을 갖고 테이블 작업을 진행하시기 바랍니다.
여기서도 ERD CLOUD에 아래와 같이 등락률 컬럼을 먼저 추가했습니다.
위의 그림과 같이 등락률을 테이블의 마지막 컬럼에 추가한 후에, 다음과 같이 ALTER문을 이용해 PRICE_DT에 컬럼을 추가합니다.
ALTER TABLE DB_DTECH.PRICE_DT ADD CHG_RT DECIMAL(18,3) NULL COMMENT '등락률';
여기서 한 가지 더, 컬럼을 추가한 후에 컬럼의 순서를 변경하는 경우가 종종 있습니다. 불가능한 것은 아니지만, 데이터가 많아지면 데이터베이스에 큰 무리를 주는 작업입니다. 그러므로 나중에 추가되는 컬럼은 가능하면 순서를 위로 올리지 않고 마지막 컬럼으로 그대로 두는 것이 좋습니다.
마지막으로 추가한 CHG_RT 컬럼에 등락률을 업데이트합니다. 저번글에서 LEAD를 사용해 등락률을 구한 로직을 응용하면 됩니다. 아래와 같습니다.
UPDATE DB_DTECH.PRICE_DT A
INNER JOIN (
SELECT T3.STK_CD
,T3.DT
,ROUND((T3.CLSE_PRC - T3.BFOR_CLSE_PRC) / T3.BFOR_CLSE_PRC * 100,2) CHG_RT # 등락률
FROM (
SELECT T1.STK_CD ,T1.STK_NM ,T2.DT ,T2.CLSE_PRC
,LEAD(T2.CLSE_PRC,1) OVER(ORDER BY T2.DT DESC) BFOR_CLSE_PRC
FROM DB_DTECH.STOCK_KRX T1
INNER JOIN DB_DTECH.PRICE_DT T2
ON (T2.STK_CD = T1.STK_CD)
WHERE T1.STK_NM = '삼성전자'
ORDER BY T2.DT ASC
) T3
) B
ON (A.STK_CD = B.STK_CD
AND A.DT = B.DT)
SET A.CHG_RT = B.CHG_RT;
오늘은 여기까지입니다.~!^^
'데이터분석 > D-Tech 데이터로 하는 재테크' 카테고리의 다른 글
2021.08.31 종목별 최적의 골든크로스! (0) | 2021.09.01 |
---|---|
골든크로스 - 종목마다 다르게 SK하이닉스편 (0) | 2021.08.27 |
2021년 전반기 영업이익 Top과 주가 흐름 (0) | 2021.08.27 |
2021년 전반기 영업이익 Top - 종목 추출 (0) | 2021.08.26 |
LEAD와 LAG - 삼성전자 등락률 구하기 (0) | 2021.08.18 |
파이썬 - 주가 이력 데이터 받아오기 (0) | 2021.08.17 |
파이썬 - KRX 주식 종목 마스터 만들기 (0) | 2021.08.11 |
파이썬 - MySQL 연결 및 간단히 차트 그리기 (0) | 2021.08.10 |