2-1-5. GROUP BY, HAVING μ
κ³Όλͺ©2. SQL κΈ°λ³Έκ³Ό νμ©
μ 1μ₯ SQL κΈ°λ³Έ
μ 5μ GROUP BY, HAVING μ
1. μ§κ³ ν¨μ(Aggregate Function)
μ¬λ¬ νλ€μ κ·Έλ£Ήμ΄ λͺ¨μ¬μ κ·Έλ£ΉλΉ λ¨ νλμ κ²°κ³Όλ₯Ό λλ €μ£Όλ λ€μ€ν ν¨μ μ€ μ§κ³ ν¨μ(Aggregate Function)μ νΉμ±μ λ€μκ³Ό κ°λ€.
μ¬λ¬ νλ€μ κ·Έλ£Ήμ΄ λͺ¨μ¬μ κ·Έλ£ΉλΉ λ¨ νλμ κ²°κ³Όλ₯Ό λλ €μ£Όλ ν¨μμ΄λ€.
GROUP BY μ μ νλ€μ μκ·Έλ£Ήν νλ€.
SELECT μ , HAVING μ , ORDER BY μ μ μ¬μ©ν μ μλ€.
ANSI/ISOμμ λ°μ΄ν° λΆμ κΈ°λ₯μΌλ‘ λΆλ₯ν ν¨μ μ€ κΈ°λ³Έμ μΈ μ§κ³ ν¨μλ λ³Έ μ μμ μ€λͺ νκ³ , ROLLUP, CUBE, GROUPING SETS κ°μ GROUP ν¨μλ 2μ₯ 5μ μμ, λ€μν λΆμ κΈ°λ₯μ κ°μ§ WINDOW ν¨μλ 2μ₯ 4μ μμ μ€λͺ νλ€.
μ§κ³ ν¨μλͺ ( [DISTINCT | ALL] μΉΌλΌμ΄λ ννμ )
μ§κ³ν¨μλͺ μ μ¬μ©λλ 2κ°μ§ μ΅μ μ λν μ€λͺ μ λ€μκ³Ό κ°λ€.
ALL : Default μ΅μ μ΄λ―λ‘ μλ΅ κ°λ₯ν¨
DISTINCT : κ°μ κ°μ νλμ λ°μ΄ν°λ‘ κ°μ£Όν λ μ¬μ©νλ μ΅μ μ
μμ£Ό μ¬μ©λλ μ£Όμ μ§κ³ ν¨μλ€μ λ€μκ³Ό κ°λ€. μ§κ³ ν¨μλ κ·Έλ£Ήμ λν μ 보λ₯Ό μ 곡νλ―λ‘ μ£Όλ‘ μ«μ μ νμ μ¬μ©λμ§λ§, MAX, MIN, COUNT ν¨μλ λ¬Έμ, λ μ§ μ νμλ μ μ©μ΄ κ°λ₯ν ν¨μμ΄λ€.
[μμ ] μΌλ°μ μΌλ‘ μ§κ³ ν¨μλ GROUP BY μ κ³Ό κ°μ΄ μ¬μ©λμ§λ§ μλμ κ°μ΄ ν μ΄λΈ μ μ²΄κ° νλμ κ·Έλ£Ήμ΄ λλ κ²½μ°μλ GROUP BY μ μμ΄ λ¨λ μΌλ‘λ μ¬μ© κ°λ₯νλ€.
[μμ ]
[μ€ν κ²°κ³Ό]
480
447
196
165
179.31
1 κ°μ νμ΄ μ νλμμ΅λλ€.
μ€ν κ²°κ³Όλ₯Ό 보면 COUNT(HEIGHT)λ NULLκ°μ΄ μλ ν€(HEIGHT) μΉΌλΌμ 건μλ§ μΆλ ₯νλ―λ‘ COUNT(*)μ 480λ³΄λ€ μμ κ²μ λ³Ό μ μλ€. κ·Έ μ΄μ λ COUNT(*) ν¨μμ μ¬μ©λ μμΌλμΉ΄λ(*)λ μ 체 μΉΌλΌμ λ»νλλ° μ 체 μΉΌλΌμ΄ NULLμΈ νμ μ‘΄μ¬ν μ μκΈ° λλ¬Έμ κ²°κ΅ COUNT(*)λ μ 체 νμ κ°μλ₯Ό μΆλ ₯ν κ²μ΄κ³ , COUNT(HEIGHT)λ HEIGHT μΉΌλΌ κ°μ΄ NULLμΈ 33건μ μ μΈλ 건μμ ν©μ΄λ€.
2. GROUP BY μ
WHERE μ μ ν΅ν΄ 쑰건μ λ§λ λ°μ΄ν°λ₯Ό μ‘°ννμ§λ§ ν μ΄λΈμ 1μ°¨μ μΌλ‘ μ‘΄μ¬νλ λ°μ΄ν° μ΄μΈμ μ 보, μλ₯Ό λ€λ©΄ κ° νλ³λ‘ μ μκ° λͺ λͺ μΈμ§, μ μλ€μ νκ· μ μ₯κ³Ό λͺΈλ¬΄κ²κ° μΌλ§λ λλμ§, λλ κ° νμμ κ°μ₯ ν° ν€μ μ μκ° λꡬμΈμ§ λ±μ 2μ°¨ κ°κ³΅ μ 보λ νμνλ€. GROUP BY μ μ SQL λ¬Έμμ FROM μ κ³Ό WHERE μ λ€μ μ€λ©°, λ°μ΄ν°λ€μ μμ κ·Έλ£ΉμΌλ‘ λΆλ₯νμ¬ μκ·Έλ£Ήμ λν νλͺ©λ³λ‘ ν΅κ³ μ 보λ₯Ό μ»μ λ μΆκ°λ‘ μ¬μ©λλ€.
GROUP BY μ κ³Ό HAVING μ μ λ€μκ³Ό κ°μ νΉμ±μ κ°μ§λ€.
GROUP BY μ μ ν΅ν΄ μκ·Έλ£Ήλ³ κΈ°μ€μ μ ν ν, SELECT μ μ μ§κ³ ν¨μλ₯Ό μ¬μ©νλ€.
μ§κ³ ν¨μμ ν΅κ³ μ 보λ NULL κ°μ κ°μ§ νμ μ μΈνκ³ μννλ€.
GROUP BY μ μμλ SELECT μ κ³Όλ λ¬λ¦¬ ALIAS λͺ μ μ¬μ©ν μ μλ€.
μ§κ³ ν¨μλ WHERE μ μλ μ¬ μ μλ€. (μ§κ³ ν¨μλ₯Ό μ¬μ©ν μ μλ GROUP BY μ λ³΄λ€ WHERE μ μ΄ λ¨Όμ μνλλ€)
WHERE μ μ μ 체 λ°μ΄ν°λ₯Ό GROUPμΌλ‘ λλκΈ° μ μ νλ€μ 미리 μ κ±°μν¨λ€.
HAVING μ μ GROUP BY μ μ κΈ°μ€ νλͺ©μ΄λ μκ·Έλ£Ήμ μ§κ³ ν¨μλ₯Ό μ΄μ©ν 쑰건μ νμν μ μλ€.
GROUP BY μ μ μν μκ·Έλ£Ήλ³λ‘ λ§λ€μ΄μ§ μ§κ³ λ°μ΄ν° μ€, HAVING μ μμ μ ν 쑰건μ λμ΄ μ‘°κ±΄μ λ§μ‘±νλ λ΄μ©λ§ μΆλ ₯νλ€.
HAVING μ μ μΌλ°μ μΌλ‘ GROUP BY μ λ€μ μμΉνλ€.
μΌλΆ λ°μ΄ν°λ² μ΄μ€μ κ³Όκ±° λ²μ μμ λ°μ΄ν°λ² μ΄μ€κ° GROUP BY μ μ λͺ μλ μΉΌλΌμ μμλλ‘ μ€λ¦μ°¨μ μ λ ¬μ μλμΌλ‘ μ€μ(λΉκ³΅μμ μΈ μ§μμ΄μμ)νλ κ²½μ°κ° μμμΌλ, μμΉμ μΌλ‘ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€ νκ²½μμλ λ€μμ μΈκΈν ORDER BY μ μ λͺ μν΄μΌ λ°μ΄ν° μ λ ¬μ΄ μνλλ€. ANSI/ISO κΈ°μ€μμλ λ°μ΄ν° μ λ ¬μ λν λ΄μ©μ ORDER BY μ μμλ§ μΈκΈλμ΄μμ§, GROUP BY μ μλ μΈκΈλμ΄ μμ§ μλ€.
[μμ ] K-리그 μ μλ€μ ν¬μ§μ λ³ νκ· ν€λ μ΄λ»κ² λλκ°λ μꡬ μ¬νμ μ μνμλ€. GROUP BY μ μ μ¬μ©νμ§ μκ³ μ§κ³ ν¨μλ₯Ό μ¬μ©νμ λ μ΄λ€ κ²°κ³Όλ₯Ό 보μ΄λμ§ ν¬μ§μ λ³ νκ· ν€λ₯Ό ꡬν΄λ³Έλ€.
[μμ ]
[μ€ν κ²°κ³Ό]
GROUP BY μ μμ κ·Έλ£Ή λ¨μλ₯Ό νμν΄ μ£Όμ΄μΌ SELECT μ μμ κ·Έλ£Ή λ¨μμ μΉΌλΌκ³Ό μ§κ³ ν¨μλ₯Ό μ¬μ©ν μ μλ€. κ·Έλ μ§ μμΌλ©΄ μμ μ κ°μ΄ μλ¬λ₯Ό λ°μνκ² λλ€.
[μμ ] SELECT μ μμ μ¬μ©λ ν¬μ§μ μ΄λΌλ νκΈ ALIASλ₯Ό GROUP BY μ μ κΈ°μ€μΌλ‘ μ¬μ©ν΄λ³Έλ€.
[μμ ]
[μ€ν κ²°κ³Ό]
GROUP BY POSITION ν¬μ§μ
3νμ μ€λ₯: ERROR: SQL λͺ λ Ήμ΄κ° μ¬λ°λ₯΄κ² μ’ λ£λμ§ μμλ€.
μ€ν κ²°κ³Όλ₯Ό μ΄ν΄λ³΄λ©΄ GROUP BY μ μ "ν¬μ§μ "μ΄λΌκ³ νμλ λΆλΆμ μλ¬κ° λ°μνλ€λ κ²μ μ μ μλ€. μΉΌλΌμ λν ALIASλ SELECT μ μμ μ μνκ³ ORDER BY μ μμλ μ¬νμ©ν μ μμ§λ§, GROUP BY μ μμλ ALIAS λͺ μ μ¬μ©ν μ μλ€λ κ²μ λ³΄μ¬ μ£Όλ μ¬λ‘μ΄λ€.
[μμ ] ν¬μ§μ λ³ μ΅λν€, μ΅μν€, νκ· ν€λ₯Ό μΆλ ₯νλ€. (ν¬μ§μ λ³μ΄λ μκ·Έλ£Ήμ 쑰건μ μ μνμκΈ° λλ¬Έμ GROUP BY μ μ μ¬μ©νλ€.)
[μμ ]
[μ€ν κ²°κ³Ό]
μ€ν κ²°κ³Όλ₯Ό 보면 ν¬μ§μ λ³λ‘ νκ· ν€ μΈμλ μΈμμ, ν€λμ μΈμμ, μ΅λν€, μ΅μν€κ° μ λλ‘ μΆλ ₯λ κ²μ νμΈν μ μλ€. ORDER BY μ μ΄ μκΈ° λλ¬Έμ ν¬μ§μ λ³λ‘ μ λ ¬μ λμ§ μμλ€. μΆκ°λ‘ ν¬μ§μ κ³Ό ν€ μ λ³΄κ° μλ μ μκ° 3λͺ μ΄λΌλ μ 보λ₯Ό μ»μ μ μμΌλ©°, ν¬μ§μ μ΄ DFμΈ 172λͺ μ€ 30λͺ μ ν€μ λν μ λ³΄κ° μλ κ²λ μ μ μλ€. GK, DF, FW, MFμ μ΅λν€, μ΅μν€, νκ· ν€λ₯Ό ꡬν λ ν€ κ°μ΄ NULLμΈ κ²½μ°λ κ³μ° λμμμ μ μΈλλ€. μ¦ ν¬μ§μ DFμ μ΅λν€, μ΅μν€, νκ· ν€ κ²°κ³Όλ ν€ κ°μ΄ NULLμΈ 30λͺ μ μ μΈν 142λͺ μ λμμΌλ‘ μνν ν΅κ³ κ²°κ³Όμ΄λ€.
3. HAVING μ
[μμ ] K-리그 μ μλ€μ ν¬μ§μ λ³ νκ· ν€λ₯Ό ꡬνλλ°, νκ· ν€κ° 180 μΌν°λ―Έν° μ΄μμΈ μ λ³΄λ§ νμνλΌλ μꡬ μ¬νμ΄ μ μλμμΌλ―λ‘ WHERE μ κ³Ό GROUP BY μ μ μ¬μ©ν΄ SQL λ¬Έμ₯μ μμ±νλ€.
[μμ ]
[μ€ν κ²°κ³Ό]
WHERE AVG(HEIGHT) >= 180
3νμ μ€λ₯: ERROR: μ§κ³ ν¨μλ νκ°λμ§ μλλ€.
μ€ν κ²°κ³Όμμ WHERE μ μ μ§κ³ ν¨μ AVG(HEIGHT) λΆλΆμμ "μ§κ³ ν¨μλ νκ°λμ§ μλλ€"λ μλ¬ λ©μμ§κ° μΆλ ₯λμλ€. μ¦ WHERE μ μλ AVG()λΌλ μ§κ³ ν¨μλ μ¬μ©ν μ μλ€. WHERE μ μ FROM μ μ μ μλ μ§ν©(μ£Όλ‘ ν μ΄λΈ)μ κ°λ³ νμ WHERE μ μ 쑰건μ μ΄ λ¨Όμ μ μ©λκ³ , WHERE μ μ 쑰건μ λ§λ νμ΄ GROUP BY μ μ λμμ΄ λλ€. κ·Έλ° λ€μ κ²°κ³Ό μ§ν©μ νμ HAVING 쑰건μ μ΄ μ μ©λλ€. κ²°κ³Όμ μΌλ‘ HAVING μ μ 쑰건μ λ§μ‘±νλ λ΄μ©λ§ μΆλ ₯λλ€. μ¦ HAVING μ μ WHERE μ κ³Ό λΉμ·νμ§λ§ κ·Έλ£Ήμ λνλ΄λ κ²°κ³Ό μ§ν©μ νμ μ‘°κ±΄μ΄ μ μ©λλ€λ μ μμ μ°¨μ΄κ° μλ€.
[μμ ] HAVING 쑰건μ μλ GROUP BY μ μμ μ μν μκ·Έλ£Ήμ μ§κ³ ν¨μλ₯Ό μ΄μ©ν 쑰건μ νμν μ μμΌλ―λ‘, HAVING μ μ μ΄μ©ν΄ νκ· ν€κ° 180 μΌν°λ―Έν° μ΄μμΈ μ λ³΄λ§ νμνλ€.
[μμ ]
[μ€ν κ²°κ³Ό]
GK
186.26
DF
180.21
2 κ°μ νμ΄ μ νλμμ΅λλ€.
GROUP BY μ κ³Ό HAVING μ μ μμλ₯Ό λ°κΎΈμ΄μ μννλλΌλ λ¬Έλ² μλ¬κ° μκ³ κ²°κ³Όλ¬Όλ λμΌν κ²°κ³Όλ₯Ό μΆλ ₯νλ€(SQL Serverμμλ λ¬Έλ²μ€λ₯κ° λ°μνλ€). μ€ν κ²°κ³Όμμ μ 체 4κ° ν¬μ§μ μ€μμ νκ· ν€κ° 180cmκ° λλ 2κ°μ λ°μ΄ν°λ§ μΆλ ₯λ κ²μ νμΈν μ μλ€.
[μμ ] SQL λ¬Έμ₯μ GROUP BY μ κ³Ό HAVING μ μ μμλ₯Ό λ°κΎΈμ΄μ μννλ€.
[μμ ]
[μ€ν κ²°κ³Ό]
GK
186.26
DF
180.21
2 κ°μ νμ΄ μ νλμμ΅λλ€.
GROUP BY μ κ³Ό HAVING μ μ μμλ₯Ό λ°κΎΈμ΄μ μννλλΌλ λ¬Έλ² μλ¬λ μκ³ κ²°κ³Όλ¬Όλ λμΌν κ²°κ³Όλ₯Ό μΆλ ₯νλ€. κ·Έλ μ§λ§, SQL λ΄μ©μ 보면, ν¬μ§μ μ΄λ μκ·Έλ£ΉμΌλ‘ κ·Έλ£Ήν(GROUPING)λμ΄ ν΅κ³ μ λ³΄κ° λ§λ€μ΄μ§κ³ , μ΄ν μ μ©λ κ²°κ³Ό κ°μ λν HAVING μ μ μ ν 쑰건μ λ§λ λ°μ΄ν°λ§μ μΆλ ₯νλ κ²μ΄λ―λ‘ λ Όλ¦¬μ μΌλ‘ GROUP BY μ κ³Ό HAVING μ μ μμλ₯Ό μ§ν€λ κ²μ κΆκ³ νλ€.
[μμ ] K-리그μ μ μλ€ μ€ μΌμ±λΈλ£¨μμ¦(K02)μ FCμμΈ(K09)μ μΈμμλ μΌλ§μΈκ°λ μꡬ μ¬νμ΄ μ μλμλ€. WHERE μ κ³Ό GROUP BY μ μ μ¬μ©ν SQLκ³Ό GROUP BY μ κ³Ό HAVING μ μ μ¬μ©ν SQLμ λͺ¨λ μμ±νλ€.
[μμ ]
[μμ ]
[μ€ν κ²°κ³Ό]
K02
49
K09
49
2 κ°μ νμ΄ μ νλμμ΅λλ€.
GROUP BY μκ·Έλ£Ήμ λ°μ΄ν° μ€ μΌλΆλ§ νμν κ²½μ°, GROUP BY μ°μ° μ WHERE μ μμ 쑰건μ μ μ©νμ¬ νμν λ°μ΄ν°λ§ μΆμΆνμ¬ GROUP BY μ°μ°μ νλ λ°©λ²κ³Ό, GROUP BY μ°μ° ν HAVING μ μμ νμν λ°μ΄ν°λ§ νν°λ§ νλ λ κ°μ§ λ°©λ²μ μ¬μ©ν μ μλ€. κ°μ μ€ν κ²°κ³Όλ₯Ό μ»λ λ κ°μ§ λ°©λ² μ€ HAVING μ μμ TEAM_ID κ°μ GROUP BY κΈ°μ€ μΉΌλΌμ λν 쑰건μ μΆκ°ν μλ μμΌλ, κ°λ₯νλ©΄ WHERE μ μμ 쑰건μ μ μ μ©νμ¬ GROUP BYμ κ³μ° λμμ μ€μ΄λ κ²μ΄ ν¨μ¨μ μΈ μμ μ¬μ© μΈ‘λ©΄μμ λ°λμ§νλ€.
[μμ ] ν¬μ§μ λ³ νκ· ν€λ§ μΆλ ₯νλλ°, μ΅λν€κ° 190cm μ΄μμΈ μ μλ₯Ό κ°μ§κ³ μλ ν¬μ§μ μ μ λ³΄λ§ μΆλ ₯νλ€.
[μμ ]
[μ€ν κ²°κ³Ό]
GK
186.26
DF
180.21
FW
179.91
3 κ°μ νμ΄ μ νλμμ΅λλ€.
SQLμ 보면 SELECT μ μμ μ¬μ©νμ§ μλ MAX μ§κ³ ν¨μλ₯Ό HAVING μ μμ 쑰건μ λ‘ μ¬μ©ν μ¬λ‘μ΄λ€. μ¦ HAVING μ μ SELECT μ μ μ¬μ©λμ§ μμ μΉΌλΌμ΄λ μ§κ³ ν¨μκ° μλλλΌλ GROUP BY μ μ κΈ°μ€ νλͺ©μ΄λ μκ·Έλ£Ήμ μ§κ³ ν¨μλ₯Ό μ΄μ©ν 쑰건μ νμν μ μλ€. μ΄ λΆλΆμ 1μ₯ 8μ μ SELECT λ¬Έμ₯μ μ€ν μμμμ μΆκ° μ€λͺ νλ€. μ¬κΈ°μ μ£Όμν κ²μ WHERE μ μ 쑰건 λ³κ²½μ λμ λ°μ΄ν°μ κ°μκ° λ³κ²½λλ―λ‘ κ²°κ³Ό λ°μ΄ν° κ°μ΄ λ³κ²½λ μ μμ§λ§, HAVING μ μ 쑰건 λ³κ²½μ κ²°κ³Ό λ°μ΄ν° λ³κ²½μ μκ³ μΆλ ₯λλ λ μ½λμ κ°μλ§ λ³κ²½λ μ μλ€. μ€ν κ²°κ³Όλ₯Ό 보면 λ€λ₯Έ κ²°κ³Ό κ°μ λ³κ²½ μμ΄ MAX(HEIGHT)κ° 189cmλ‘ 190cm λ―Έλ§μΈ MF ν¬μ§μ μ λ°μ΄ν°λ§ HAVING 쑰건μ μν΄ λλ½λ κ²μ νμΈν μ μλ€. (λ€λ₯Έ ν¬μ§μ μ λͺ¨λ MAX(HEIGHT)κ° 190μ΄μμ΄λ€). λλ½λ λ°μ΄ν°μ ν΅κ³ μ 보λ λ€μκ³Ό κ°λ€.
3
0
MF
162
162
189
165
176.31
2 κ°μ νμ΄ μ νλμμ΅λλ€.
4. CASE ννμ νμ©ν μλ³ λ°μ΄ν° μ§κ³
"μ§κ³ ν¨μ(CASE( ))~GROUP BY" κΈ°λ₯μ, λͺ¨λΈλ§μ μ 1μ κ·νλ‘ μΈν΄ λ°λ³΅λλ μΉΌλΌμ κ²½μ° κ΅¬λΆ μΉΌλΌμ λκ³ μ¬λ¬ κ°μ λ μ½λλ‘ λ§λ€μ΄μ§ μ§ν©μ, μ ν΄μ§ μΉΌλΌ μλ§νΌ νμ₯ν΄μ μ§κ³ λ³΄κ³ μλ₯Ό λ§λλ μ μ©ν κΈ°λ²μ΄λ€. λΆμλ³λ‘ μλ³ μ μ¬μμ νκ· κΈμ¬λ₯Ό μκ³ μΆλ€λ κ³ κ°μ μꡬ μ¬νμ΄ μλλ°, μ μ¬ ν 1λ λ§λ€ κΈμ¬ μΈμμ΄λ 보λμ€ μ§κΈκ³Ό κ°μ μΌμ μ΄ μ κΈ°μ μΌλ‘ μ‘νλ€λ©΄ μ 무μ μΌλ‘ μ€μν μ λ³΄κ° λ μ μλ€.
STEP1. κ°λ³ λ°μ΄ν° νμΈ
[μμ ] λ¨Όμ κ°λ³ μ μ¬μ 보μμ μλ³ λ°μ΄ν°λ₯Ό μΆμΆνλ μμ μ μ§ννλ€. μ΄ λ¨κ³λ μλ³ μ λ³΄κ° μλ€λ©΄ μλ΅ κ°λ₯νλ€.
[μμ ] Oracle
[μμ ] SQL Server
[μμ ] SQL Server
[μ€ν κ²°κ³Ό]
SMITH
20
12
800
ALLEN
30
2
1600
WARD
30
2
1250
JONES
20
4
2975
MARTIN
30
9
1250
BLAKE
30
5
2850
CLARK
10
6
2450
SCOTT
20
7
3000
KING
10
11
5000
TURNER
30
9
1500
ADAMS
20
7
1100
JAMES
30
12
950
FORD
20
12
3000
MILLER
10
1
1300
14 κ°μ νμ΄ μ νλμμ΅λλ€.
STEP2. μλ³ λ°μ΄ν° ꡬλΆ
[μμ ] μΆμΆλ MONTH λ°μ΄ν°λ₯Ό Simple Case Expressionμ μ΄μ©ν΄μ 12κ°μ μλ³ μΉΌλΌμΌλ‘ ꡬλΆνλ€. μ€ν κ²°κ³Όμμ λ³΄μ¬ μ£Όλ ENAME μΉΌλΌμ μ΅μ’ 리ν¬νΈμμ μꡬλλ λ°μ΄ν°λ μλμ§λ§, μ 보μ νλ¦μ μ΄ν΄νκΈ° μν΄ λΆκ°μ μΌλ‘ λ³΄μ¬ μ£Όλ μμ μ 보μ΄λ€. FROM μ μμ μ¬μ©λ μΈλΌμΈ λ·°λ 2μ₯ 1μ μμ μ€λͺ νλ€.
[μμ ]
[μ€ν κ²°κ³Ό]
SMITH
20
800
ALLEN
30
1600
WARD
30
1250
JONES
20
2975
MARTIN
30
1250
BLAKE
30
2850
CLARK
10
2450
SCOTT
20
3000
KING
10
5000
TURNER
30
1500
ADAMS
20
1100
JAMES
30
950
FORD
20
3000
MILLER
10
1300
14 κ°μ νμ΄ μ νλμμ΅λλ€.
STEP3. λΆμλ³ λ°μ΄ν° μ§κ³
[μμ ] μ΅μ’ μ μΌλ‘ 보μ¬μ£Όλ 리ν¬νΈλ λΆμλ³λ‘ μλ³ μ μ¬μμ νκ· κΈμ¬λ₯Ό μκ³ μΆλ€λ μꡬ μ¬νμ΄λ―λ‘ λΆμλ³ νκ· κ°μ ꡬνκΈ° μν΄ GROUP BY μ κ³Ό AVG μ§κ³ ν¨μλ₯Ό μ¬μ©νλ€. μ§μ κ°μΈμ λν μ 보λ λ μ΄μ νμ μμΌλ―λ‘ μ μΈνλ€. ORDER BY μ μ μ¬μ©νμ§ μμκΈ° λλ¬Έμ λΆμλ²νΈλ³λ‘ μ λ ¬μ΄ λμ§λ μμλ€.
[μμ ]
[μ€ν κ²°κ³Ό]
10
1300
2450
5000
20
2988
1100
1900
30
1425
2850
1375
950
3 κ°μ νμ΄ μ νλμμ΅λλ€.
νλμ λ°μ΄ν°μ μ¬λ¬ λ² CASE ννμ μ¬μ©νκ³ μ§κ³ν¨μκ° μ μ©λλ―λ‘ SQL μ²λ¦¬ μ±λ₯ μΈ‘λ©΄μμ λμ κ²μ΄ μλλκ³ μκ°ν μλ μλ€. κ·Έλ μ§λ§ κ°μ κΈ°λ₯μ νλ 리ν¬νΈλ₯Ό μμ±νκΈ° μν΄ μ₯λ¬Έμ νλ‘κ·Έλ¨μ μ½λ©νλ κ²μ λΉν΄, μ λ°©λ²μ νμ©νλ©΄ 볡μ‘ν νλ‘κ·Έλ¨μ΄ μλ νλμ SQL λ¬Έμ₯μΌλ‘ μ²λ¦¬ κ°λ₯νλ―λ‘ DBMS μμ νμ©μ΄λ μ²λ¦¬ μλμμ ν¨μ¬ ν¨μ¨μ μ΄λ€. λ°μ΄ν° 건μκ° λ§μμ§μλ‘ μ²λ¦¬ μλ μ°¨μΈλ λ λ μ μλ€. κ°λ°μλ€μ κ°λ₯ν νλμ SQL λ¬Έμ₯μΌλ‘ λΉμ¦λμ€μ μΈ μꡬ μ¬νμ μ²λ¦¬ν μ μλλ‘ λ Έλ ₯ν΄μΌ νλ€.
[μμ ] Simple Case ExpressionμΌλ‘ ννλ μμ SQLκ³Ό κ°μ λ΄μ©μΌλ‘ Oracleμ DECODE ν¨μλ₯Ό μ¬μ©ν SQL λ¬Έμ₯μ μμ±νλ€.
[μμ ]
DECODE ν¨μλ₯Ό μ¬μ©ν¨μΌλ‘μ¨ SQL λ¬Έμ₯μ΄ μ‘°κΈ λ μ§§μμ‘λ€. CASE ννκ³Ό Oracleμ DECODE ν¨μλ ννμ μλ‘ μ₯λ¨μ μ΄ μμΌλ―λ‘ μ΄λ€ κΈ°λ₯μ μ νν μ§λ μ¬μ©μμ λͺ«μ΄λ€.
5. μ§κ³ ν¨μμ NULL μ²λ¦¬
리ν¬νΈμ λΉμΉΈμ NULLμ΄ μλ ZEROλ‘ νννκΈ° μν΄ NVL(Oracle)/ISNULL(SQL Server) ν¨μλ₯Ό μ¬μ©νλ κ²½μ°κ° λ§μλ°, λ€μ€ ν ν¨μλ₯Ό μ¬μ©νλ κ²½μ°λ μ€νλ € λΆνμν λΆνκ° λ°μνλ―λ‘ κ΅³μ΄ NVL ν¨μλ₯Ό λ€μ€ ν ν¨μ μμ μ¬μ©ν νμκ° μλ€. λ€μ€ ν ν¨μλ μ λ ₯ κ°μΌλ‘ μ 체 건μκ° NULL κ°μΈ κ²½μ°λ§ ν¨μμ κ²°κ³Όκ° NULLμ΄ λμ€κ³ μ 체 건μ μ€μμ μΌλΆλ§ NULLμΈ κ²½μ°λ NULLμΈ νμ λ€μ€ ν ν¨μμ λμμμ μ μΈνλ€. μλ₯Ό λ€λ©΄ 100λͺ μ€ 10λͺ μ μ±μ μ΄ NULL κ°μΌ λ νκ· μ ꡬνλ λ€μ€ ν ν¨μ AVGλ₯Ό μ¬μ©νλ©΄ NULL κ°μ΄ μλ 90λͺ μ μ±μ μ λν΄μ νκ· κ°μ ꡬνκ² λλ€. CASE νν μ¬μ©μ ELSE μ μ μλ΅νκ² λλ©΄ Default κ°μ΄ NULLμ΄λ€. NULLμ μ°μ°μ λμμ΄ μλ λ°λ©΄, SUM(CASE MONTH WHEN 1 THEN SAL ELSE 0 END)μ²λΌ ELSE μ μμ 0(Zero)μ μ§μ νλ©΄ λΆνμνκ² 0μ΄ SUM μ°μ°μ μ¬μ©λλ―λ‘ μμμ μ¬μ©μ΄ λ§μμ§λ€. κ°μ κ²°κ³Όλ₯Ό μ»μ μ μλ€λ©΄ κ°λ₯ν ELSE μ μ μμκ°μ μ§μ νμ§ μκ±°λ ELSE μ μ μμ±νμ§ μλλ‘ νλ€. κ°μ μ΄μ λ‘ Oracleμ DECODE ν¨μλ 4λ²μ§Έ μΈμλ₯Ό μ§μ νμ§ μμΌλ©΄ NULLμ΄ Defaultλ‘ ν λΉλλ€. λ§μ΄ μ€μνλ κ² μ€μ νλκ° Oracleμ SUM(NVL(SAL,0)), SQL Serverμ SUM(ISNULL (SAL,0)) μ°μ°μ΄λ€. κ°λ³ λ°μ΄ν°μ κΈμ¬(SAL)κ° NULLμΈ κ²½μ°λ NULLμ νΉμ±μΌλ‘ μλμ μΌλ‘ SUM μ°μ°μμ λΉ μ§λ λ°, λΆνμνκ² NVL/ISNULL ν¨μλ₯Ό μ¬μ©ν΄ 0(Zero)μΌλ‘ λ³νμμΌ λ°μ΄ν° 건μλ§νΌμ μ°μ°μ΄ μΌμ΄λκ² νλ κ²μ μμ€ν μ μμμ λλΉνλ μΌμ΄λ€. 리ν¬νΈ μΆλ ₯ λ NULLμ΄ μλ 0μ νμνκ³ μΆμ κ²½μ°μλ NVL(SUM(SAL),0)μ΄λ, ISNULL(SUM(SAL),0)μ²λΌ μ 체 SUMμ κ²°κ³Όκ° NULLμΈ κ²½μ°(λμ 건μκ° λͺ¨λ NULLμΈ κ²½μ°)μλ§ ν λ² NVL/ISNULL ν¨μλ₯Ό μ¬μ©νλ©΄ λλ€.
[μμ ] νλ³ ν¬μ§μ λ³ FW, MF, DF, GK ν¬μ§μ μ μΈμμμ νλ³ μ 체 μΈμμλ₯Ό ꡬνλ SQL λ¬Έμ₯μ μμ±νλ€. λ°μ΄ν°κ° μλ κ²½μ°λ 0μΌλ‘ νμνλ€.
[μμ ]
SIMPLE_CASE_EXPRESSION 쑰건 - Oracle
[μμ ]
SIMPLE_CASE_EXPRESSION 쑰건 - Oracle CASE ννμ ELSE 0, ELSE NULL 문ꡬλ μλ΅ κ°λ₯νλ―λ‘ λ€μκ³Ό κ°μ΄ μ‘°κΈ λ μ§§κ² SQL λ¬Έμ₯μ μμ±ν μ μλ€.
Default κ°μΈ NULLμ΄ μ μ©λ¨.
[μμ ]
SEARCHED_CASE_EXPRESSION 쑰건 - Oracle
[μμ ]
SEARCHED_CASE_EXPRESSION 쑰건 - SQL Server
[μ€ν κ²°κ³Ό]
K14
0
1
1
0
2
K06
11
11
20
4
46
K13
1
0
1
1
3
K15
1
1
1
0
3
K02
10
18
17
4
49
K12
1
0
1
0
2
K04
13
11
18
4
46
K03
6
15
23
5
49
K07
9
22
16
4
51
K05
10
19
17
5
51
K08
8
15
15
4
45
K11
1
1
1
0
3
K01
12
15
13
5
45
K10
5
15
13
3
36
K09
12
18
15
4
49
15 κ°μ νμ΄ μ νλμμ΅λλ€.
4κ°μ μμ SQL λ¬Έμ₯μ κ°μ μ€ν κ²°κ³Όλ₯Ό μΆλ ₯νλ€. ORDER BY μ μ΄ μ μ©λμ§ μμμΌλ―λ‘ TEAM_IDλ³λ‘ μ λ ¬λΌ μμ§ μλ€. TEAM_ID 'K08'μ κ²½μ° POSITIONμ΄ NULLμΈ 3κ±΄μ΄ ν¬μ§μ λ³ λΆλ₯μλ λΉ μ Έ μμ§λ§ SUMμλ μΆκ°λμ΄ μλ€. μ΄λ TEAM_ID 'K08'μ κ° POSITIONμ ν©κ³(FW+MF+DF+GK)κ° 42건μ΄κ³ SUMκ°μ΄ 45건μΈκ²μΌλ‘ κ³μ°ν μμλ€(44-42=3).
[μμ ] GROUP BY μ μμ΄ μ 체 μ μλ€μ ν¬μ§μ λ³ νκ· ν€ λ° μ 체 νκ· ν€λ₯Ό μΆλ ₯ν μλ μλ€.
[μμ ]
[μ€ν κ²°κ³Ό]
176.31
179.91
180.21
186.26
179.31
1 κ°μ νμ΄ μ νλμμ΅λλ€.
Last updated
Was this helpful?