반응형
순위함수를 이용하여 순위 매기기
SELECT 컬럼 이름, 순위함수() OVER (ORDER BY 컬럼이름)
FROM 테이블 이름
순위함수 | 설명 |
RANK() | 중복 순위 적용, 다음 순위가 중복 순위 적용 후 순위 예) 1, 2, 2, 4 |
DENSE_RANK() | 중복 순위 적용, 다음 순위는 중복 순위 적용 + 1 예) 1, 2, 2, 3 |
이전 행, 다음 행 가져오기
SELECT 컬럼이름, 이동함수(컬럼이름, offset) OVER (ORDER BY 컬럼이름)
FROM 테이블이름
이동함수 | 설명 |
LAG() | 이전 행 가져오기 |
LEAD() | 다음 행 가져오기 |
테이블 분할 & 분석(PARTITION BY)
SELECT 컬럼이름, 함수() OVER(PARTITION BY 컬럼이름 [ORDER BY 컬럼이름])
FROM 테이블이름
테이블 분할 & 분석(FRAME절)
SELECT 컬럼이름, 함수() OVER (ORDER BY 컬럼이름 ROWS BETWEEN [FRAME절] AND [FRAME 절]
FROM 테이블이름
Frame 절 명령어 | 설명 |
CURRENT ROW | 현재 로우 |
n PRECEDING | n번째 뒤의 로우 |
n FOLLOWING | n번째 앞의 로우 |
UNBOUNDED PRECEDING | 가장 첫번째 로우 |
UNBOUNDED FOLLOWING | 가장 마지막 로우 |
1. Financial_Info 테이블에서 각 연도별 총자산 순위를 구해보세요.(내림차순)
SELECT *, RANK() OVER(PARTITION BY FiscalPrd_ ORDER BY VALUE_ DESC) 순위
FROM financial_info
WHERE NAME_ = 'TOTAL ASSETS';
2. StockETF_Price 테이블에서 삼성전자의 5일 /20일 이동평균 값을 구해보세요
SELECT ID, MarketDate, CLOSE_,
AVG(Close_) OVER (ORDER BY MarketDate
ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) MA5,
AVG(Close_) OVER (ORDER BY MarketDate
ROWS BETWEEN 19 PRECEDING AND CURRENT ROW) MA20
FROM stocketf_price
WHERE ID = 40853 -- 삼성전자 ID
ORDER BY MarketDate;
3. Financial_Info 테이블에서 각 기업별로 전년도 대비 Pretax_Income 증감률을 확인해보세요
SELECT CODE, NAME_, FiscalPrd_, VALUE_ '이번금액',
LAG(VALUE_, 1) OVER (PARTITION BY CODE ORDER BY FiscalPrd_) '이전금액',
(Value_ - LAG(VALUE_, 1) OVER (PARTITION BY CODE ORDER BY FiscalPrd_)) / ABS(LAG(VALUE_, 1) OVER (PARTITION BY CODE ORDER BY FiscalPrd_)) '증감률'
FROM financial_info
WHERE NAME_ ='PRETAX INCOME'
ORDER BY CODE, FiscalPrd_;
반응형
'Database' 카테고리의 다른 글
[오라클DB] PL/SQL 프로시저 반복문 - 0329 2교시 (0) | 2023.03.29 |
---|---|
[오라클DB] 프로시저 복습문제 - 0329 1교시 (0) | 2023.03.29 |
[DB] SQL 기본 (0) | 2023.03.29 |
[오라클DB] PL/SQL 프로시저 (0) | 2023.03.28 |
[오라클DB] 뷰 VIEW (0) | 2023.03.28 |