Web Frontend/Database

[SQL] + 연산자와 집계 함수( SUM, AVG, COUNT, MIN, MAX etc ) 차이점

챙v 2025. 3. 5. 16:36
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
반응형