SQL Server/실기 정리
SQL Server 54강 - 52주 변동률 계산 (서브쿼리와 CASE 활용)
코딩하는냥이
2025. 6. 9. 10:52
반응형
이번 강의에서는 서브쿼리(Subquery)를 활용하여 52주 최저/최고가를 기반으로
주가 차이와 변동률을 계산하는 방법을 알아봅니다.
특히, 0으로 나누는 오류 방지를 위한 CASE 처리 방법도 함께 익혀봅니다.
📌 예제 코드
📄 기본 서브쿼리 사용
SELECT
X.symbol,
w52_min,
w52_max,
w52_max - w52_min AS w52_diff_price,
(w52_max - w52_min) / w52_min * 100 AS w52_diff_ratio
FROM (
SELECT
symbol,
CONVERT(decimal(18,2), MIN([close])) AS w52_min,
CONVERT(decimal(18,2), MAX([close])) AS w52_max
FROM stock
WHERE date >= DATEADD(WEEK, -52, '2021-10-04')
AND date <= '2021-10-04'
GROUP BY symbol
) AS X;
⚠️ 0 나눗셈 방지 (CASE WHEN 조건 사용)
SELECT
X.symbol,
w52_min,
w52_max,
w52_max - w52_min AS w52_diff_price,
CONVERT(decimal(18,2),
CASE WHEN w52_min > 0 THEN (w52_max - w52_min) / w52_min * 100 ELSE 0 END
) AS w52_diff_ratio
FROM (
SELECT
symbol,
CONVERT(decimal(18,2), MIN([close])) AS w52_min,
CONVERT(decimal(18,2), MAX([close])) AS w52_max
FROM stock
WHERE date >= DATEADD(WEEK, -52, '2021-10-04')
AND date <= '2021-10-04'
GROUP BY symbol
) AS X;
💻 실행 결과 예시
symbol | w52_min | w52_max | w52_diff_price | w52_diff_ratio |
MSFT | 200 | 300 | 100 | 50 |
AAPL | 120 | 180 | 60 | 50 |
(예시입니다. 실제 결과는 데이터에 따라 다름)
💬 코드 설명
- 서브쿼리로 symbol별 MIN, MAX 값을 먼저 계산하고,
- 외부 쿼리에서 이 값을 바탕으로 주가 차이 및 변동률 계산
- CASE WHEN을 이용해 w52_min이 0일 경우 0으로 나누는 오류 방지
- CONVERT(decimal(18,2), ...)로 결과의 소수점 자릿수 정리
💡 포인트 정리
- 중첩 SELECT문을 활용하면 코드가 깔끔하고 재활용하기 쉬워짐
- 0으로 나누는 오류는 실무에서 자주 발생하므로 반드시 방어 코드 필요
- 통계 분석 시 최소값-최대값, 변동률 계산은 중요한 지표가 됩니다
📌 정리하자면, 이 쿼리는 52주 기준으로 주가의 범위와 변동률을 안전하게 분석할 수 있는 구조입니다.
특히, CASE와 CONVERT의 조합은 실무 SQL에서 자주 활용되는 패턴이므로 꼭 익혀두시길 바랍니다.