πSQL λ¬Έλ² - μ§κ³ ν¨μ(Aggregation Functions)μ λ°μ΄ν°λ₯Ό μμ½
π μ§κ³ ν¨μλ‘ λ°μ΄ν° μμ½νκΈ°
λ°μ΄ν°κ° λ§μμλ‘ μ 체 λ΄μ©μ μμ½ν΄μ νμ
νλ κ² μ€μν©λλ€.
μ΄λ΄ λ μ¬μ©νλ κ²μ΄ λ°λ‘ μ§κ³ ν¨μ(Aggregation Functions)!
μ΄λ² κΈμμλ SQLμμ μμ£Ό μ¬μ©νλ μ§κ³ ν¨μλ€κ³Ό ν¨κ»,GROUP BY
, HAVING
μ μ νμ©ν κ·Έλ£Ή λ¨μ λΆμκΉμ§ μ½κ² μ€λͺ
ν κ²μ.
β μ§κ³ ν¨μλ?
μ§κ³ ν¨μλ μ¬λ¬ ν(Row)μ μ
λ ₯λ°μ νλμ κ²°κ³Όκ°μΌλ‘ μμ½ν΄μ£Όλ ν¨μμ
λλ€.
μ£Όλ‘ μ«μ λ°μ΄ν°λ₯Ό ν©μ°νκ±°λ νκ· μ ꡬν λ μ¬μ©ν΄μ.
π’ μ£Όμ μ§κ³ ν¨μ μ’ λ₯
ν¨μ | μ€λͺ | μμ |
| νμ κ°μ (NULL μ μΈ) |
|
| μ΄ν© |
|
| νκ· |
|
| μ΅λκ° |
|
| μ΅μκ° |
|
π§ͺ κΈ°λ³Έ μ¬μ© μμ
-- μ 체 λμ κ°μ
SELECT COUNT(*) FROM Book;
-- κ³ κ° IDκ° 3μΈ μ¬λμ μ΄ κ΅¬λ§€ κΈμ‘
SELECT SUM(saleprice)
FROM Orders
WHERE custid = 3;
-- λμ νκ· κ°κ²©
SELECT AVG(price)
FROM Book;
-- κ°μ₯ λΉμΌ λμ κ°κ²©
SELECT MAX(price) FROM Book;
π GROUP BYλ‘ κ·Έλ£Ήλ³ μμ½
GROUP BY μ μ λ°μ΄ν°λ₯Ό κ·Έλ£Ή λ¨μλ‘ λ¬Άμ΄ μ§κ³ν μ μκ² ν΄μ€λλ€.
-- κ³ κ°λ³ μ΄ κ΅¬λ§€ κΈμ‘
SELECT custid, SUM(saleprice)
FROM Orders
GROUP BY custid;
β’ GROUP BY λ€μ μ€λ μ»¬λΌ κΈ°μ€μΌλ‘ κ·Έλ£Ήμ λλ ,
β’ κ° κ·Έλ£Ήμ λν΄ μ§κ³ ν¨μκ° μ μ©λ©λλ€.
π― HAVINGμΌλ‘ κ·Έλ£Ή 쑰건 μΆκ°
β’ WHEREλ ν λ¨μ 쑰건,
β’ HAVINGμ κ·Έλ£Ή λ¨μ 쑰건μ
λλ€.
-- 2ν μ΄μ ꡬ맀ν κ³ κ°λ§ 보기
SELECT custid, COUNT(*)
FROM Orders
GROUP BY custid
HAVING COUNT(*) >= 2;
π WHERE vs HAVING μ°¨μ΄
WHERE μ | HAVING μ | |
μ μ© μμ | GROUP BY μ΄μ | GROUP BY μ΄ν |
μ μ© λμ | κ°λ³ ν(Row) | κ·Έλ£Ή(Group) |
μ§κ³ ν¨μ μ¬μ© | β μ¬μ© λΆκ° | β μ¬μ© κ°λ₯ |
μ¬μ© λͺ©μ | μνλ ν νν°λ§ | μνλ κ·Έλ£Ή νν°λ§ |
ν¨κ» μ°λ μ | SELECT, FROM, ORDER BY λ±κ³Ό ν¨κ» | GROUP BYμ ν¨κ» μ¬μ© |
π¦ μ€μ μμ λͺ¨μ
-- μΆνμ¬λ³ λμ νκ· κ°κ²© ꡬνκΈ°
SELECT publisher, AVG(price) AS avg_price
FROM Book
GROUP BY publisher;
-- νκ· κ°κ²©μ΄ 15,000μ μ΄μμΈ μΆνμ¬λ§
SELECT publisher, AVG(price)
FROM Book
GROUP BY publisher
HAVING AVG(price) >= 15000;
-- κ³ κ° μ΄λ¦ + μ΄ κ΅¬λ§€ κΈμ‘ μΆλ ₯
SELECT name, SUM(saleprice)
FROM Customer C, Orders O
WHERE C.custid = O.custid
GROUP BY name;
π μ 리 μμ½
|