๐Ÿ“ŒSQL ๋ฌธ๋ฒ• - ์ง‘๊ณ„ ํ•จ์ˆ˜(Aggregation Functions)์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์•ฝ

์กยท2025๋…„ 4์›” 7์ผ
0

๐Ÿ’พ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค

๋ชฉ๋ก ๋ณด๊ธฐ
6/12
post-thumbnail

๐Ÿ“Š ์ง‘๊ณ„ ํ•จ์ˆ˜๋กœ ๋ฐ์ดํ„ฐ ์š”์•ฝํ•˜๊ธฐ

๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์„์ˆ˜๋ก ์ „์ฒด ๋‚ด์šฉ์„ ์š”์•ฝํ•ด์„œ ํŒŒ์•…ํ•˜๋Š” ๊ฒŒ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
์ด๋Ÿด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์ง‘๊ณ„ ํ•จ์ˆ˜(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๋กœ ๊ทธ๋ฃน๋ณ„ ์š”์•ฝ

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;

๐Ÿ“Œ ์ •๋ฆฌ ์š”์•ฝ

ํ•ญ๋ชฉ์„ค๋ช…
์ง‘๊ณ„ ํ•จ์ˆ˜์—ฌ๋Ÿฌ ํ–‰์„ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ์š”์•ฝ (COUNT, SUM, AVG, MAX, MIN)
GROUP BYํŠน์ • ์ปฌ๋Ÿผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌถ์–ด์„œ ์ง‘๊ณ„ ์ˆ˜ํ–‰
HAVING๊ทธ๋ฃนํ•‘๋œ ๊ฒฐ๊ณผ์— ์กฐ๊ฑด ์ถ”๊ฐ€ (HAVING COUNT(*) > 2 ๋“ฑ)
WHERE vs HAVINGWHERE๋Š” ํ–‰ ํ•„ํ„ฐ / HAVING์€ ๊ทธ๋ฃน ํ•„ํ„ฐ, ์ ์šฉ ์‹œ์ ์ด ๋‹ค๋ฆ„

๐Ÿ“˜ ํ•™์Šต ํŒ
โ€ข SELECT์— ์—†๋Š” ์ปฌ๋Ÿผ์€ GROUP BY์— ๋ฐ˜๋“œ์‹œ ํฌํ•จ๋ผ์•ผ ํ•จ
โ€ข HAVING ์—†์ด GROUP BY๋งŒ ์จ๋„ ์ง‘๊ณ„ ๊ฐ€๋Šฅ
โ€ข COUNT(*) vs COUNT(column)์˜ ์ฐจ์ด๋„ ๊ผญ ๊ตฌ๋ถ„ํ•˜์ž!

profile
์•ˆ๋…•ํ•˜์„ธ์š”! AI & ๋ฐ์ดํ„ฐ๋ถ„์„์„ ์ „๊ณตํ•˜๋Š” ๋Œ€ํ•™์›์ƒ(์„์‚ฌ ๊ณผ์ •)์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€