SQL

MS SQL 실무_4편

Mara7 2022. 6. 6.
반응형
LIST

Pertition by 절

- 실전에서 가장 자주 사용하는 문법

- 금융 관련 데이터를 다룰 때 자주 활용함

- 순위함수, 이동함수를 같이 많이 사용함

 

1. 순위 함수

select name
, employees
, ROW_NUMBER() over (order by employees DESC) as 순위
from companyinfo
order by 순위

ROW_NUMBER() : employees가 같아도 다른 행으로 취급해라

DESC : 크기가 큰 순서대로 1등 구분, 생략시에 작은 순서대로 구분

RANK()나 DENSE_RANK()를 ROW_NUMBER() 대신 사용이 가능함

 

2. 이동 함수

- SQL Server에서 2012년 이후 버전부터 사용이 가능함

- lag : 이전 행의 값을 가져올 때 사용

- lead : 다음 행의 값을 가져올 때 사용

 

offset : 생략시에 1행의 앞(뒤) 값을 가져옴, 지정한 값만큼의 데이터를 가져옴

select date_
, close_ as 종가
, lag(close_,1) over (order by date_) as 어제종가
, lead(close_,1) over (order by date_) as 내일종가
from StockPrice
where ID=40853
order by Date_

-> ID : 40853인 삼성전자의 종가, 어제종가, 내일 종가를 한꺼번에 보여주기

 

lag, lead 함수

- 변화율을 계산할 때 필수적으로 사용

변화율 = (현재값-이전값)/이전값

= (현재값/이전값)-1

- 매일의 주식수익률 계산 가능

 

lag, lead함수를 이용해 오늘 수익률과 내일 수익률 구하기

 

select date_
, close_/lag(close_,1)over(order by date_)-1 as 오늘수익률
, lead(close_,1) over(order by date_)-1 as 내일수익률
from StockPrice
where ID=40853
order by Date_

3. 테이블 분할(partition by)

- group by와 동일하게 어떤 그룹에 적용하는 함수

- 그룹을 나누어서 해당 레코드의 순위를 살펴보거나 이동함수 등을 적용할 때 사용함

select name
, IncInCtryCode
, rank() over (partition by IncInCtryCode order by employees DESC) as 순위
from companyinfo

 

국가별 고용인 크기별 순위 확인하기

select name
, IncInCtryCode
, rank() over (partition by IncInCtryCode order by employees DESC) as 순위
from companyinfo
where IncInCtryCode is not null #국가코드의 null값을 없애고, 순위순서대로 정렬하기
order by 순위
select date_
, ID
, Close_/lag(Close_,1) over (Partition by ID order by date_)-1.0 as 수익률
from StockPrice

기업을 구분하는 ID 기준으로 수익률 계산

 

 

반응형
LIST

'SQL' 카테고리의 다른 글

MS SQL 실무_6편  (0) 2022.06.21
MS SQL 실무_5편  (0) 2022.06.15
MS SQL 실무_3편  (0) 2022.05.29
MS SQL 실무_2편  (0) 2022.05.21
MS SQL 실무1  (0) 2022.05.14

댓글