728x90
반응형
SQL에서 덧셈 연산자(+)와 집계 함수(SUM(), AVG(), COUNT() 등)는 숫자 데이터를 처리할 때 많이 사용됩니다.
하지만 연산 방식이 다르기 때문에 잘못 사용하면 예상과 다른 결과가 나올 수 있습니다.
✅ + 연산자와 SUM() 함수의 차이
SQL에서 덧셈(+) 연산자와 SUM() 함수는 모두 숫자 데이터를 다룰 때 사용되지만, 용도가 다릅니다.
연산 역할 NULL 처리 그룹별 계산 가능 여부
+ | 개별 행의 값을 더함 | NULL이 포함되면 결과 NULL | ❌ |
SUM() | 여러 행의 값을 합산 | NULL 무시 | ✅ |
1. + 연산자
- 두 개 이상의 숫자를 단순히 더하는 연산자
- 행(row) 단위 연산이므로 개별 행의 값만 더할 수 있음
- NULL 값을 만나면 결과가 NULL이 됨 ( 0 + NULL = NULL )
SELECT 100 + 200 AS 결과; -- 결과: 300
SELECT 급여 + 보너스 AS 총급여
FROM 직원;
- 개별 행마다 급여와 보너스를 더한 값이 총급여로 출력됨
2. SUM() 함수
- 집계(Aggregation) 함수로, 여러 행(Row)의 값을 합산
- GROUP BY와 함께 사용 가능
- NULL 값은 자동으로 무시됨 ( 1 + NULL = 1 )
- ‼️ NULL로만 이루어진 컬럼은 NULL을 반환함
SELECT SUM(급여) AS 총급여
FROM 직원;
- 직원 테이블의 급여 컬럼 값들을 모두 합산
SELECT 부서, SUM(급여) AS 부서별_총급여
FROM 직원
GROUP BY 부서;
- 부서별로 그룹을 나누고, 각 부서의 총 급여를 계산
3. SUM을 사용할 때, NULL로만 구성된 컬럼이 있을 경우?
- NULL로만 구성된 컬럼에 SUM을 할 경우 NULL을 반환하기 때문에 NVL함수와 함께 사용합니다.
SELECT NVL(SUM(CASE WHEN DEPTNO = 10 THEN 1 END), 0) AS '10번 부서원수'
FROM EMP
GROUP BY JOB;
- 10번 부서 인원 수를 계산
📌 + 연산자와 SUM()의 차이 정리
구분 + 연산자 SUM() 함수
+ 연산자 | SUM() | |
역할 | 개별 행의 숫자를 더함 | 여러 행의 값을 합산 |
연산 단위 | 행(Row) 단위 | 컬럼(Column) 단위 |
NULL 처리 | NULL이 포함되면 결과가 NULL | NULL은 무시됨( 단, NULL로만 이루어진 컬럼은 NULL 리턴) |
GROUP BY 가능 여부 | 불가능 | 가능 |
✅ SQL의 주요 집계 함수(Aggregate Functions)
집계 함수는 여러 행(Row)의 데이터를 하나의 값으로 요약하는 함수입니다. 일반적으로 GROUP BY와 함께 사용됩니다.
1️⃣ SUM() – 합계 계산
SELECT SUM(급여) AS 총급여
FROM 직원;
- 모든 직원의 급여를 합산
SELECT 부서, SUM(급여) AS 부서별_총급여
FROM 직원
GROUP BY 부서;
- 부서별 급여 총합 계산
2️⃣ AVG() – 평균값 계산
SELECT AVG(급여) AS 평균급여
FROM 직원;
- 직원들의 평균 급여 계산
SELECT 부서, AVG(급여) AS 부서별_평균급여
FROM 직원
GROUP BY 부서;
- 부서별 평균 급여 계산
📌 AVG()의 NULL 처리:
NULL 값은 평균 계산에서 자동으로 제외됨
3️⃣ COUNT() – 행 개수 세기
SELECT COUNT(*) FROM 직원;
- 직원 테이블의 전체 행 개수 반환
SELECT COUNT(급여) FROM 직원;
- 급여 컬럼에서 NULL을 제외한 행 개수만 반환
SELECT 부서, COUNT(*) AS 직원수
FROM 직원
GROUP BY 부서;
- 부서별 직원 수 계산
📌 COUNT(*) vs COUNT(컬럼명) 차이
- COUNT(*) → NULL 포함 전체 행 개수 반환
- COUNT(컬럼명) → NULL을 제외한 해당 컬럼의 개수 반환
만약 COUNT(*)을 했는데 NULL만 있을 경우? NULL의 개수 반환. 아예 비어 있으면 0 반환
4️⃣ MAX() – 최대값 찾기
SELECT MAX(급여) AS 최고급여
FROM 직원;
- 가장 높은 급여 조회
SELECT 부서, MAX(급여) AS 부서별_최고급여
FROM 직원
GROUP BY 부서;
- 부서별 최고 급여 조회
5️⃣ MIN() – 최소값 찾기
SELECT MIN(급여) AS 최저급여
FROM 직원;
- 가장 낮은 급여 조회
SELECT 부서, MIN(급여) AS 부서별_최저급여
FROM 직원
GROUP BY 부서;
- 부서별 최저 급여 조회
✅ 📌 집계 함수 정리
함수 | 역할 | NULL 처리 |
SUM() | 합계 | NULL 무시 |
AVG() | 평균 | NULL 무시 |
COUNT(*) | 전체 행 개수 | NULL 포함 |
COUNT(컬럼) | 특정 컬럼 값 개수 | NULL 제외 |
MAX() | 최대값 | NULL 무시 |
MIN() | 최소값 | NULL 무시 |
마무리
✅ + 연산자는 개별 행의 값을 더하는 용도, SUM()은 여러 행을 합산하는 용도
✅ NULL 처리가 다르므로 주의해야 함
728x90
반응형
'Web Frontend > Database' 카테고리의 다른 글
[SQL] 데이터 정렬하는 법 - ORDER BY절 활용하기 (0) | 2025.03.05 |
---|---|
[SQL] 오름차순(ASC)과 내림차순(DESC) 정렬 순서 (0) | 2025.03.05 |
[SQL] NOT, AND, OR 우선순위 (0) | 2025.03.05 |
[SQL] WHERE절은 조건 필터링 절 (0) | 2025.03.05 |
[SQL] NULL 데이터 처리(ISNULL, NULLIF, NVL, COALESCE) (0) | 2025.03.05 |