๊ด€๋ฆฌ ๋ฉ”๋‰ด

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๋ช… ์ด์ƒ์ธ ์ „๊ณต๋งŒ ์ถœ๋ ฅ