CS Student’s SAP&Tech Journey✨

[SAP] 집계 함수(Aggregate Function) - MIN, MAX, SUM, COUNT, GROUP BY, HAVING 본문

SAP/ABAP 문법 | Open SQL

[SAP] 집계 함수(Aggregate Function) - MIN, MAX, SUM, COUNT, GROUP BY, HAVING

인포마틱 2025. 2. 14. 21:40

SAP ABAP에서 데이터를 효율적으로 조회하고 분석하려면 집계 함수(Aggregate Function)를 활용하는 것이 중요합니다. 집계 함수는 여러 행(Row)의 값을 하나의 결과 값으로 계산하는 함수로, SQL과 함께 사용하여 데이터를 효과적으로 처리할 수 있습니다.

이번 포스팅에서는 ABAP에서 사용할 수 있는 집계 함수의 종류와 활용법을 정리해보겠습니다.

 


📌 1. 집계 함수(Aggregate Function)란?

집계 함수는 테이블의 여러 행(Row) 데이터를 하나의 값으로 변환하는 함수입니다.
예를 들어, 학생 테이블에서 최대 나이, 최소 나이, 전체 학생 수, 평균 연봉 등을 구할 때 사용할 수 있습니다.

 

✅ ABAP에서 사용 가능한 집계 함수

⭐ 괄호안에 띄어쓰기 꼭 주의할 것!

집계 함수 설명
MIN( 컬럼명 ) 해당 컬럼의 최소값 반환
MAX( 컬럼명 ) 해당 컬럼의 최대값 반환
SUM( 컬럼명 ) 해당 컬럼의 모든 값을 더한 합계 반환
AVG( 컬럼명 ) 해당 컬럼의 평균값 반환
COUNT( * ) 해당 테이블의 전체 행 개수 반환
COUNT( 컬럼명 ) 해당 컬럼에서 NULL이 아닌 값 개수 반환

 

 

📌 2. 집계 함수 사용

ABAP에서는 집계 함수와 함께 SELECT SINGLE을 사용할 수 없으며, SELECT ... INTO 구문을 활용해야 합니다.

✅ 아래 예시는 ZSTUDENT1_07을 사용합니다.

 

1️⃣ MIN()과 MAX() 사용법 (최소값, 최대값 구하기)

DATA: lv_min_birth TYPE DATS,  " 가장 오래된 생일 (나이 많음)
      lv_max_birth TYPE DATS.  " 가장 최신 생일 (나이 적음)

SELECT MIN( STDBIRTH ), MAX( STDBIRTH )
  INTO (lv_min_birth, lv_max_birth)
  FROM ZSTUDENT1_07.

WRITE: '가장 나이 많은 학생 생일:', lv_min_birth,
       '가장 나이 어린 학생 생일:', lv_max_birth.

✔ MIN(STDBIRTH)MAX(STDBIRTH)를 사용하여 가장 오래된 생일과 최신 생일을 가져옴
✔ INTO (변수1, 변수2) 형식으로 저장

 

 2️⃣ SUM()과 AVG() 사용법 (합계 및 평균 구하기)

DATA: lv_total_salary TYPE P DECIMALS 2,  " 총 연봉
      lv_avg_salary TYPE P DECIMALS 2.   " 평균 연봉

SELECT SUM( SALARY ), AVG( SALARY )
  INTO (lv_total_salary, lv_avg_salary)
  FROM ZSTUDENT1_07.

WRITE: '총 연봉 합계:', lv_total_salary,
       '평균 연봉:', lv_avg_salary.

✔ SUM(SALARY) → 전체 급여 총합
✔ AVG(SALARY) → 평균 급여

 

3️⃣ COUNT() 사용법 (행 개수 구하기)

DATA: lv_total_students TYPE I.

SELECT COUNT( * ) INTO lv_total_students
  FROM ZSTUDENT1_07.

WRITE: '총 학생 수:', lv_total_students.

✔ COUNT(*)를 사용하면 테이블의 총 행 수를 가져올 수 있음
✔ 특정 조건을 추가해서 원하는 데이터만 개수 셀 수도 있음

 

DATA: lv_cs_students TYPE I.

SELECT COUNT( * ) INTO lv_cs_students
  FROM ZSTUDENT1_07
  WHERE STDMAJOR = '컴퓨터'.

WRITE: '컴퓨터공학 전공 학생 수:', lv_cs_students.

✔ 컴퓨터 전공 학생 수만 카운트

 

4️⃣ GROUP BY와 함께 사용하기 (집계 함수 + 그룹화)

GROUP BY를 사용하면 특정 컬럼을 기준으로 데이터를 그룹화하여 집계할 수 있습니다.

전공별 학생 수 구하기

DATA: lt_result TYPE TABLE OF ZSTUDENT1_07,
      ls_result TYPE ZSTUDENT1_07.

SELECT STDMAJOR, COUNT( * )
  INTO TABLE lt_result
  FROM ZSTUDENT1_07
  GROUP BY STDMAJOR.

LOOP AT lt_result INTO ls_result.
  WRITE: / ls_result-STDMAJOR, ls_result-STDBIRTH.
ENDLOOP.

✔ GROUP BY STDMAJOR → 전공별로 그룹화
✔ COUNT(*) → 각 전공에 속한 학생 수를 반환

 

5️⃣ HAVING과 함께 사용하기 (조건 추가)

집계 결과에서 특정 조건을 추가하려면 HAVING을 사용해야 합니다.

✅ 학생 수가 3명 이상인 전공만 조회

DATA: lt_result TYPE TABLE OF ZSTUDENT1_07,
      ls_result TYPE ZSTUDENT1_07.

SELECT STDMAJOR, COUNT( * )
  INTO TABLE lt_result
  FROM ZSTUDENT1_07
  GROUP BY STDMAJOR
  HAVING COUNT( * ) >= 3.

LOOP AT lt_result INTO ls_result.
  WRITE: / ls_result-STDMAJOR, ls_result-STDBIRTH.
ENDLOOP.

✔ HAVING COUNT(*) >= 3 → 학생이 3명 이상인 전공만 출력