이 식은 Oracle/CUBRID 계열에서 자주 쓰는 “조건부 카운트” 패턴입니다.
SUM(DECODE(SIGN(point), 1, 1, 0))
point 값이 0보다 큰 행의 개수를 센다
point > 0 → 1
point = 0 → 0
point < 0 → -1
SIGN(point) = 1 이면 → 1
그 외(0, -1, NULL 포함) → 0
👉 즉,
point > 0 → 1
point ≤ 0 → 0
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
SUM(CASE WHEN point > 0 THEN 1 ELSE 0 END)
COUNT(CASE WHEN point > 0 THEN 1 END)
👉 의미 완전히 동일, 가독성은 훨씬 좋음
SUM(DECODE(SIGN(point), 1, 1, 0))
= point > 0 인 행 개수

| 큐브리드 ini 설정파일 수정, 데이터 추출 성능 개선하기 (0) | 2026.01.14 |
|---|---|
| mysql 조건에서 in 절에는 몇 개까지 넣을 수 있을까? (1) | 2026.01.14 |
| mysql 테이블 컬럼, 인덱스 구조 보는 명령어는? (0) | 2025.12.20 |
| /*+USE_IDX ORDERED*/ /*+USE_NL ORDERED*/ /*+USE_IDX*/ 인덱스 힌트 차이 (0) | 2025.12.17 |
| 쿼리 수행할때 중복제거 distinct 넣고 안넣고 플랜에서 차이 (0) | 2025.12.17 |