
"νμ΄ μ€μ΄λ€μ΄μΌ ν΄? μ μ§λμ΄μΌ ν΄?"
.
.
.
| ν κ°μ | μ¬μ© |
|---|---|
| μ€μ΄λ¦ (κ·Έλ£Ήλ³ 1κ°) | β GROUP BY |
| μ μ§λ¨ (μλ³Έ κ·Έλλ‘) | β μλμ° ν¨μ |
.
.
.
.
.
.
.
.
.
.
λ¬Έμ 보μλ§μ "μ΄ λ³΅μ‘ν΄ λ³΄μ¬!" β λ°λ‘ μλμ° ν¨μ!
β μ€λ² μμ§λμ΄λ§! π
"νμ΄ μ€μ΄λ€μ΄μΌ ν΄? μ μ§λμ΄μΌ ν΄?"
| ν κ°μ | μ¬μ© |
|---|---|
| μ€μ΄λ¦ (κ·Έλ£Ήλ³ 1κ°) | GROUP BY |
| μ μ§λ¨ (μλ³Έ κ·Έλλ‘) | μλμ° ν¨μ |
| νμ | λ° | μ μ |
|---|---|---|
| μ² μ | A | 90 |
| μν¬ | A | 85 |
| λ―Όμ | B | 95 |
| μ§μ | B | 80 |
κ²°κ³Ό:
| λ° | νκ· |
|----|------|
| A | 87.5 |
| B | 87.5 |
β 4ν β 2ν (μ€μ΄λ¦!)
SELECT λ°, AVG(μ μ)
FROM μ±μ
GROUP BY λ°
β GROUP BY!
κ²°κ³Ό:
| νμ | λ° | μ μ | λ°νκ· |
|------|-----|------|--------|
| μ² μ | A | 90 | 87.5 |
| μν¬ | A | 85 | 87.5 |
| λ―Όμ | B | 95 | 87.5 |
| μ§μ | B | 80 | 87.5 |
β 4ν β 4ν (μ μ§!)
SELECT νμ, λ°, μ μ,
AVG(μ μ) OVER(PARTITION BY λ°) AS λ°νκ·
FROM μ±μ
β μλμ° ν¨μ!
| ν€μλ | μμ |
|---|---|
| ~λ³ ν©κ³/νκ· /κ°μ | "λΆμλ³ νκ· μ°λ΄" |
| ~λ³ μ΅λ/μ΅μ | "νμ¬λ³ μ΅κ³ λ§€μΆ" |
| κ·Έλ£ΉλΉ 1κ° κ²°κ³Ό | "μΉ΄ν κ³ λ¦¬λΉ μν μ" |
| ν€μλ | μμ |
|---|---|
| Nλ²μ§Έ | "2λ²μ§Έ ꡬ맀 λ΄μ" |
| μμ λ§€κΈ°κ³ + μλ³Έ μ μ§ | "μμμ ν¨κ» μ 체 λͺ©λ‘" |
| λμ | "λμ ν©κ³" |
| μ΄μ /λ€μ κ° λΉκ΅ | "μ μ λλΉ μ¦κ°" |
| μλ³Έ + μ§κ³κ° κ°μ΄ | "κ°μΈ μ μ + νκ· κ°μ΄" |
λ¬Έμ μ½μ
β
"κ²°κ³Ό ν κ°μκ° μ€μ΄λ€μ΄μΌ ν΄?"
β
YES β GROUP BY
β
NO β "μλ³Έ νλ§λ€ λκ° κ³μ° νμ?"
β
YES β μλμ° ν¨μ
β
NO β κ·Έλ₯ SELECT
λ¬Έμ : 2015λ 1~3μ νμμ΄ μλ λνλ³λ‘
νλ¨:
β GROUP BY! β
SELECT c.name, MIN(r.ranking), COUNT(*)
FROM students s
JOIN colleges c ON ...
JOIN rankings r ON ...
WHERE r.year = 2015 AND r.ranking IN (1,2,3)
GROUP BY c.id, c.name
"κ° νμμ μμ + ν΄λΉ λν λ΄ λͺ λ±μΈμ§λ 보μ¬μ€"
β μλ³Έ μ μ§ + μΆκ° κ³μ°
β μλμ° ν¨μ! β
SELECT s.name, r.ranking,
ROW_NUMBER() OVER(PARTITION BY c.id ORDER BY r.ranking) AS λνλ΄μμ
FROM ...
"ν μ€μ΄κΈ° = GROUP BY"
"ν μ μ§ + κ³μ° μΆκ° = μλμ° ν¨μ"
- λ¬Έμ μμ μνλ κ²°κ³Ό ν κ°μ μκ°νλ?
- "~λ³" λμ€λ©΄ μΌλ¨ GROUP BY λ¨Όμ κ³ λ €!
- μλμ° ν¨μ μ°κΈ° μ μ "μ λ§ νμνκ°?" μλ¬Έ!
- 볡μ‘νκ² κ°λ©΄ μ€μλ§ λμ΄λλ€!
