1. Null 값의 연산은 언제나 Null이다
- Null 값은 '공백이나 숫자 0' 과는 전혀 다른 의미
- '아직 정의되지 않은 미지의 값' 또는 '현재 데이터를 입력하지 못하는 경우'를 의미
- 주문 데이터 -
주문번호 | 주문금액 | 주문취소금액 |
1 | 100,000 | 20,000 |
2 | 15,000 |
SELECT 주문금액 - 주문취소금액 COL1
, NVL(주문금액 - 주문취소금액, 0) COL2
, NVL(주문금액, 0) - NVL(주문취소금액, 0) COL3
FROM 주문
- SQL 수행 결과 -
COL1 | COL2 | COL3 |
80,000 | 80,000 | 80,000 |
0 | 15,000 |
2. 집계함수는 Null 값을 제외하고 처리한다
(1) SUM
- 주문 데이터 -
주문번호 | 주문금액 | 주문취소금액 |
1 | 100,000 | |
2 | 15,000 | |
3 | 40,000 | |
4 | 45,000 | |
5 | 100,000 |
SELECT SUM(주문금액) - SUM(주문취소금액) COL1
, NVL(SUM(주문금액 - 주문취소금액), 0) COL2
, NVL(SUM(주문금액), 0) - NVL(SUM(주문취소금액), 0) COL3
FROM 주문
- SQL 수행 결과 -
COL1 | COL2 | COL3 |
0 | 300,000 |
(2) AVG
- 주문 데이터 -
주문번호 | 주문금액 | 주문취소금액 |
1 | 100,000 | 20,000 |
2 | 15,000 | |
3 | 40,000 | 10,000 |
4 | 45,000 | 10,000 |
5 | 100,000 | 10,000 |
SELECT SUM(주문취소금액) / COUNT(*) COL1
, AVG(주문취소금액) COL2
FROM 주문
- SQL 수행 결과 -
COL1 | COL2 |
10,000 | 12,500 |
- COL1 : 주문취소금액의 합계를 총건수로 나눔 -> 50,000 / 5 = 10,000
- COL2 : 집계함수는 Null값을 제외한다는 특성 -> 50,000 / 4 = 12,500
참고문헌 : SQL 전문가 가이드
'프로그래밍 > ORACLE' 카테고리의 다른 글
[ORACLE] LISTAGG 사용하여 여러행을 하나의 컬럼으로 합치기 (0) | 2022.01.11 |
---|---|
[ORACLE] 반복문(CURSOR, FOR LOOP) 사용법 (0) | 2022.01.02 |
[ORACLE] 테이블정의서 추출 쿼리 (0) | 2019.04.16 |
[ORACLE] 조인으로 삭제하기 (0) | 2019.04.04 |