
๋ฐ์ดํฐ๊ฐ ๋ง์์๋ก ์ ์ฒด ๋ด์ฉ์ ์์ฝํด์ ํ์
ํ๋ ๊ฒ ์ค์ํฉ๋๋ค.
์ด๋ด ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋ก ์ง๊ณ ํจ์(Aggregation Functions)!
์ด๋ฒ ๊ธ์์๋ SQL์์ ์์ฃผ ์ฌ์ฉํ๋ ์ง๊ณ ํจ์๋ค๊ณผ ํจ๊ป,
GROUP BY, HAVING ์ ์ ํ์ฉํ ๊ทธ๋ฃน ๋จ์ ๋ถ์๊น์ง ์ฝ๊ฒ ์ค๋ช
ํ ๊ฒ์.
์ง๊ณ ํจ์๋ ์ฌ๋ฌ ํ(Row)์ ์
๋ ฅ๋ฐ์ ํ๋์ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ์์ฝํด์ฃผ๋ ํจ์์
๋๋ค.
์ฃผ๋ก ์ซ์ ๋ฐ์ดํฐ๋ฅผ ํฉ์ฐํ๊ฑฐ๋ ํ๊ท ์ ๊ตฌํ ๋ ์ฌ์ฉํด์.
| ํจ์ | ์ค๋ช | ์์ |
|---|---|---|
COUNT() | ํ์ ๊ฐ์ (NULL ์ ์ธ) | COUNT(*), COUNT(column) |
SUM() | ์ดํฉ | SUM(saleprice) |
AVG() | ํ๊ท | AVG(price) |
MAX() | ์ต๋๊ฐ | MAX(price) |
MIN() | ์ต์๊ฐ | MIN(price) |
-- ์ ์ฒด ๋์ ๊ฐ์
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 ์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃน ๋จ์๋ก ๋ฌถ์ด ์ง๊ณํ ์ ์๊ฒ ํด์ค๋๋ค.
-- ๊ณ ๊ฐ๋ณ ์ด ๊ตฌ๋งค ๊ธ์ก
SELECT custid, SUM(saleprice)
FROM Orders
GROUP BY custid;
โข GROUP BY ๋ค์ ์ค๋ ์ปฌ๋ผ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃน์ ๋๋ ,
โข ๊ฐ ๊ทธ๋ฃน์ ๋ํด ์ง๊ณ ํจ์๊ฐ ์ ์ฉ๋ฉ๋๋ค.
โข WHERE๋ ํ ๋จ์ ์กฐ๊ฑด,
โข HAVING์ ๊ทธ๋ฃน ๋จ์ ์กฐ๊ฑด์
๋๋ค.
-- 2ํ ์ด์ ๊ตฌ๋งคํ ๊ณ ๊ฐ๋ง ๋ณด๊ธฐ
SELECT custid, COUNT(*)
FROM Orders
GROUP BY custid
HAVING COUNT(*) >= 2;
| ํญ๋ชฉ | 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;
| ํญ๋ชฉ | ์ค๋ช |
|---|---|
| ์ง๊ณ ํจ์ | ์ฌ๋ฌ ํ์ ํ๋์ ๊ฐ์ผ๋ก ์์ฝ (COUNT, SUM, AVG, MAX, MIN) |
| GROUP BY | ํน์ ์ปฌ๋ผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฌถ์ด์ ์ง๊ณ ์ํ |
| HAVING | ๊ทธ๋ฃนํ๋ ๊ฒฐ๊ณผ์ ์กฐ๊ฑด ์ถ๊ฐ (HAVING COUNT(*) > 2 ๋ฑ) |
| WHERE vs HAVING | WHERE๋ ํ ํํฐ / HAVING์ ๊ทธ๋ฃน ํํฐ, ์ ์ฉ ์์ ์ด ๋ค๋ฆ |
๐ ํ์ต ํ
โข SELECT์ ์๋ ์ปฌ๋ผ์ GROUP BY์ ๋ฐ๋์ ํฌํจ๋ผ์ผ ํจ
โข HAVING ์์ด GROUP BY๋ง ์จ๋ ์ง๊ณ ๊ฐ๋ฅ
โข COUNT(*) vs COUNT(column)์ ์ฐจ์ด๋ ๊ผญ ๊ตฌ๋ถํ์!