일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- sql전문가
- 연관 서브 쿼리
- SQL내장함수
- Window Functions
- 단일 행 서브 쿼리
- sql
- sqlp
- Cloud ERP
- Where
- SUM
- Group Functions
- Searched Case Expression
- SQL Grouping Functions
- Britcent 3개월 완독 챌린지
- 다중 열 서브 쿼리
- 데이터모델링
- null
- Simple Case Expression
- SQL개발자
- Atomic Habit
- SQL연산자
- Aggregation Function
- 3개월 완독 챌린지
- SQL기본
- SQL숫자형 함수
- SQLD
- nvl
- SQL문자형함수
- CASE중첩
- AVG
- Today
- Total
슴슴한 IT
[SQLD, SQLP]SQL기본 - 집계함수와 NULL 처리 본문
집계함수 사용 시 NULL 처리 관련 유의사항
COUNT()
COUNT() 함수는 NULL 값을 포함하여 해당 컬럼의 데이터 개수를 계산합니다. 따라서 COUNT(*)을 사용하면 NULL 값을 가진 행도 카운트됩니다. NULL 값을 카운트하지 않으려면 COUNT(column)을 사용하여 특정 컬럼을 카운트하는 방식을 고려해야 합니다.
SUM() 및 AVG()
SUM()과 AVG() 함수는 NULL 값을 무시하고 계산합니다. 따라서 계산 중에 NULL 값이 있더라도 결과에는 영향을 미치지 않습니다. 예를 들어, 학생 100명 중 10명의 성적이 NULL 값일 때 평균을 구하는 다중 행 함수 AVG를 사용하면 NULL값이 아닌 90명의 성적에 대해 평균값을 구합니다. 100명에 대한 평균을 구하기 위해서는 SUM(점수) / COUNT(*) 로 계산해야 합니다.
MIN() 및 MAX()
MIN()과 MAX() 함수는 NULL 값을 무시하고 계산합니다. NULL 값이 포함된 행은 계산에 영향을 미치지 않습니다.
GROUP_CONCAT() (MySQL) 및 STRING_AGG() (PostgreSQL)
이 함수들은 문자열을 결합하는 함수로, NULL 값은 빈 문자열로 처리됩니다.
COUNT(column)
COUNT() 함수에 특정 컬럼을 전달할 경우, 해당 컬럼에서 NULL 값을 가진 행은 무시되고 NULL이 아닌 행만 카운트됩니다.
CASE 문 NULL 처리 관련 유의사항
CASE 표현 사용 시 ELSE 절을 생략하게 되면 Default 값이 NULL입니다. NULL은 연산의 대상이 아닌 반면, SUM(CASE MONTH WHEN 1 THEN SAL ELSE 0 END) 처럼 ELSE 절에서 0을 지정하면 불필요하게 0이 SUM 연산에 사용됩니다. 가능한 ELSE 절에 상수 값을 지정하지 않거나 ELSE 절을 작성하지 않는게 좋습니다.
집계함수와 NVL 함수 사용
Oracle 함수 NVL의 경우 SUM(NVL(SAL,0)), SQL Server의 SUM(ISNULL, (SAL, 0)) 연산입니다. 개별 데이터의 급여(SAL)가 NULL인 경우 NULL의 특성 상 SUM 연산에서 누락되는데 NVL/ISNULL 함수를 사용해 0으로 변환시켜 불편한 연산이 발생합니다. 출력 시 NULL이 아닌 0을 표시할 경우, NVL(SUM(SAL),0) , ISNULL(SUM(SAL),0)으로 사용하면 됩니다.
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
'SQL' 카테고리의 다른 글
[SQLD,SQLP]SQL기본 - JOIN (0) | 2023.08.15 |
---|---|
[SQLD, SQLP]SQL기본 - ORDER BY (0) | 2023.08.11 |
[SQLD,SQLP]SQL기본 - GROUP BY, HAVING 절 (0) | 2023.08.08 |
[SQLD, SQLP]SQL기본 - 논리/부정연산자 (0) | 2023.08.07 |
[SQLD,SQLP]SQL기본 - SQL연산자 (0) | 2023.08.06 |