상세 컨텐츠

본문 제목

SUM(DECODE(SIGN(point), 1, 1, 0)) 해당 쿼리 뜻은?

IT/DB

by JR 2026. 1. 14. 14:36

본문

300x250
반응형

 

 

 

 


이 식은 Oracle/CUBRID 계열에서 자주 쓰는 “조건부 카운트” 패턴입니다.


전체 식

SUM(DECODE(SIGN(point), 1, 1, 0))

한 줄 의미

point 값이 0보다 큰 행의 개수를 센다


1️⃣ 안쪽부터 해석

🔹 SIGN(point)

point > 0  →  1
point = 0  →  0
point < 0  → -1

🔹 DECODE(SIGN(point), 1, 1, 0)

SIGN(point) = 1 이면 → 1
그 외(0, -1, NULL 포함) → 0

👉 즉,

point > 0 → 1
point ≤ 0 → 0

2️⃣ 바깥 SUM(...)

SUM(1 or 0)

1의 개수를 전부 더함


✅ 최종 의미

SUM(DECODE(SIGN(point), 1, 1, 0))

👉 point가 양수(> 0)인 행의 개수


📊 예제 데이터

point
10
5
0
-3
NULL

계산 과정

point SIGN DECODE SUM 대상
10 1 1 1
5 1 1 1
0 0 0 0
-3 -1 0 0
NULL NULL 0 0

결과

SUM = 2

🔄 요즘식(가독성 좋은) 대체 표현

✅ CASE WHEN (표준 SQL)

SUM(CASE WHEN point > 0 THEN 1 ELSE 0 END)

✅ COUNT + CASE

COUNT(CASE WHEN point > 0 THEN 1 END)

👉 의미 완전히 동일, 가독성은 훨씬 좋음


🔥 실무에서 왜 이렇게 쓰였을까?

  • Oracle 초기에는 CASE가 없거나 느렸음
  • DECODE + SIGN 조합이 조건 카운트의 정석
  • CUBRID에서도 자주 남아 있는 레거시 패턴

한 줄 요약

SUM(DECODE(SIGN(point), 1, 1, 0))
= point > 0 인 행 개수

 


 

 

 

300x250
반응형

관련글 더보기