[SAP] μ§κ³ ν¨μ(Aggregate Function) - MIN, MAX, SUM, COUNT, GROUP BY, HAVING
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λͺ μ΄μμΈ μ κ³΅λ§ μΆλ ₯