1. GROUP BY
๐ ๊ธฐ์ค์ด ๋๋ ํ๋๋ฅผ ๋ค์ ์ ์ด์ฃผ๋ฉด ๊ธฐ์ค ํ๋๊ฐ ๊ฐ์ ๋ ์ฝ๋๋ฅผ ๋ชจ์ ํต๊ณ๊ฐ์ ๊ตฌํจ
๐ GROUP BY ๊ตฌ๋ฌธ์ ๊ทธ๋ฃนํ์ ํด ์ค ๋ฟ์ด๋ฉฐ ์ด๋ค ํต๊ณ๋ฅผ ๋ผ ๊ฒ์ธ๊ฐ๋ ํ๋ ๋ชฉ๋ก์ ์ง๊ณ ํจ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง
๐ ์ฌ๋ฌ ๊ฐ์ ์ง๊ณํจ์๋ฅผ ๋์์ ์ฌ์ฉ ๊ฐ๋ฅ
SELECT '์์
๋ถ', AVG(salary) FROM tStaff WHERE depart='์์
๋ถ';
SELECT '์ด๋ฌด๋ถ', AVG(salary) FROM tStaff WHERE depart='์ด๋ฌด๋ถ';
SELECT '์ธ์ฌ๊ณผ', AVG(salary) FROM tStaff WHERE depart='์ธ์ฌ๊ณผ';
๐ ๋ถ์๋ณ ์๊ธ ํ๊ท ์ ์๊ณ ์ถ์ด ๋ถ์๋ง๋ค AVG ํจ์๋ฅผ ํธ์ถํ๊ฒ ๋๋ฉด ๋ถ์ ๋ชฉ๋ก์ ๋ง๋ค๊ณ ๊ฐ ๋ถ์๋ง๋ค ๋ช ๋ น์ ์ผ์ผ์ด ์คํํด์ผ ํ๊ณ ๊ฒฐ๊ณผ๋ ๋ฐ๋ก ์ถ๋ ฅ๋์ด ๋ณด๊ธฐ๋ ๋ถํธํ๋ค. ๋ํ, ์ง๊ณํจ์์ ์ผ๋ฐํ๋๋ฅผ ๊ฐ์ด ์ ์ ์ ์์ด ํ๋ ๋ชฉ๋ก์ ๋ถ์๋ช ์ ํ ๋ฒ ๋ ์ ์ด์ผ ํ๋ค.
๐ก ์ด ๊ฒฝ์ฐ์ ํ์ํ ๊ตฌ๋ฌธ์ด GROUP BY. ๊ธฐ์ค ํ๋๋ ์ง๊ณ ํจ์์ ๊ฐ์ด ์ธ ์ ์์ด์ ๋ชฉ๋ก๋ ๋ณด๊ธฐ ์ข๊ฒ ์ถ๋ ฅ ํ ์ ์์.
๐ ๋ถ์๋ณ ์๊ธ ํ๊ท ์ ๊ตฌํ๋ ค๋ฉด depart ํ๋ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํ
1) ๊ธฐ์ค ํ๋์์ผ๋ก ์ ๋ ฌํ์ฌ ๊ฐ์ ๊ทธ๋ฃน๋ผ๋ฆฌ ๊ตฌ๋ถ
2) ํต๊ณ ๋์ ํ๋๋ฅผ ์์๋๋ก ์ฝ์ด ์ง๊ณ๋ฅผ ๊ตฌํจ
SELECT depart, AVG(salary) FROM tStaff GROUP BY depart;
SELECT grade, AVG(salary) FROM tStaff GROUP BY grade;
SELECT depart, COUNT(*), MAX(joindate), AVG(score) FROM tStaff GROUP BY depart;
2. ๊ธฐ์ค ํ๋
๐ GROUP BY์ ๊ธฐ์ค ํ๋๋ ์ค๋ณต ๊ฐ์ด ์์ ๋๋ง ์๋ฏธ์๋ค.
โก๏ธ ๋ ์ฝ๋๋ณ๋ก ๊ณ ์ ํ ๊ฐ์ ๊ฐ์ง๋ ํ๋๋ ๊ทธ๋ฃนํ ๊ธฐ์ค์ผ๋ก ๋ถ์ ํฉ(์ : ์์ด๋)
โก๏ธ ํ ๋ถ์์์ ์ฌ๋ฌ ์ง์์ด ์์๋์ด ์๊ณ ๋ถ์๊ฐ ๊ฐ์ ์ง์์ด ๋ง๊ธฐ ๋๋ฌธ์ ๋ถ์๋ณ ์ง๊ณ ๊ฐ๋ฅ.
โก๏ธ ์ฑ๋ณ๋ ์ค๋ณต๊ฐ์ด์ด์ ๊ทธ๋ฃนํ ํ๋๋ก ์ ํฉ
SELECT gender, AVG(salary) FROM tStaff GROUP BY gender;
๐ ๋จ๋ ์ฑ๋ณ๋ก ํ๊ท ์๊ธ์ ๊ตฌํจ. ์ฑ๋ณ์ ๋จ์, ์ฌ์ ๋ ๋ถ๋ฅ์ด๋ฉฐ ๊ทธ๋ฃนํํ ๊ฒฐ๊ณผ๋ 2๊ฐ์ ๋ ์ฝ๋๋ก ์ถ๋ ฅ
๐ ์ค๋ณต ๊ฐ์ ๊ฐ์ง๋ ํ๋๋ง ๊ทธ๋ฃนํ์ ๊ธฐ์ค์ด ๋๋ ๊ฒ์ ์๋๋ฉฐ ์์์ ํ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํ ํ ์ ์๋ค.
SELECT name, SUM(salary) FROM tStaff GROUP BY name;
๐ ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํ์ ํ๋ ๊ฒ๋ ๋ฌธ๋ฒ์ ์ผ๋ก ๊ฐ๋ฅํ์ง๋ง ์ ์ง์์ ์๊ธ์ด ๊ฐ๊ฐ ์ถ๋ ฅ์ด ๋์ด ์๋ฏธ๊ฐ ์์.
๐ ๊ธฐ์ค ํ๋๋ฅผ ์ฝค๋ง๋ก ๊ตฌ๋ถํ์ฌ ๋ ๊ฐ ์ด์๋ ์ธ ์ ์๋ค.
โก๏ธ ์ด ๊ฒฝ์ฐ ์ฒซ ๋ฒ์งธ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃน์ ๋๋๊ณ ๊ทธ ๊ทธ๋ฃน ๋ด์์ ๋ค์ ๋ ๋ฒ์งธ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃน์ ๋๋๋ค.
๐ ๊ธฐ์ค ํ๋์ ์์๋ ๊ทธ๋ฃนํ ๊ณผ์ ์ ์ํฅ์ ์ฃผ์ง๋ง ๊ฒฐ๊ณผ์๋ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
โก๏ธ ์์๋ ORDER BY๋ก ์กฐ์ ๊ฐ๋ฅ
SELECT depart, gender, COUNT(*) FROM tStaff GROUP BY depart, gender;
SELECT gender, depart, COUNT(*) FROM tStaff GROUP BY gender, depart;
SELECT depart, gender, COUNT(*) FROM tStaff GROUP BY depart, gender ORDER BY gender, depart;
๐ ๋ถ์๋ณ, ์ฑ๋ณ๋ก ๊ทธ๋ฃนํํ์ฌ ์ง์์ ๊ตฌํจ. ์ด๋ฌด๋ถ๋ ์ฌ์ง์์ด ์์ด์ 5๊ฐ์ ๊ทธ๋ฃน๋ง ๋์ด.
3. GROUP BY์ ํ๋ ๋ชฉ๋ก
โก๏ธ <๊ทธ๋ฃนํ ์ฟผ๋ฆฌ์ ๊ธฐ๋ณธ ํ์>
SELECT ๊ธฐ์คํ๋, ์ง๊ณํจ์() FROM ํ
์ด๋ธ GROUP BY ๊ธฐ์คํ๋;
๐ GROUP BY ์ ์ด ์์ผ๋ฉด ํ๋ ๋ชฉ๋ก์๋ ๊ธฐ์ค ํ๋๋ ์ง๊ณ ํจ์๋ง ์์ผ ํ๋ค.
๐ ํ๋ ๋ชฉ๋ก์ ์ ์ผ ์ฒ์์๋ ํต์ ๊ธฐ์ค ํ๋๋ฅผ ์ถ๋ ฅํ์ฌ ์ด๋ค ๊ทธ๋ฃน์ ๋ํ ํต๊ณ์ธ์ง ํ์
โก๏ธ ๊ธฐ์ค ํ๋๋ฅผ ๋นผ๊ณ ์ง๊ณ ํจ์๋ง์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ฉด, ๊ณ์ฐ์ ๋๋ฐ๋ก ๋์ง๋ง ๊ฐ ํ์ด ์ด๋ค ๋ถ์์ ๋ํ ํต๊ณ์น์ธ์ง ์์ ๋ณผ ์ ์๋ค.
SELECT depart, salary FROM tStaff GROUP BY depart;
SELECT SUM (salary) FROM tStaff GROUP BY depart;
๐ ์ง๊ณ ํจ์๋ ๋ค์ค ๊ฐ์ด ์์ด์ผ ๊ณ์ฐํ ์ ์์ผ๋ฏ๋ก ๊ทธ๋ฃนํ์ ํ ๋๋ง ์ ์ฉ
โก๏ธ GROUP BY ์ ์์ด ์ผ๋ฐ ํ๋์ ์ง๊ณ ํจ์๋ฅผ ๊ฐ์ด ์ถ๋ ฅํ๋ฉด ์๋ฏธ๊ฐ ์๋ค
SELECT depart, SUM(salary) FROM tStaff;
๐ ๋ ์ฝ๋๋ณ๋ก ๊ณ ์ ํ ๋ถ์๋ช ๊ณผ ํต๊ณ์ ์ํด ๊ณ์ฐํ๋ ์๊ธ ์ดํฉ์ ๊ฐ์ด ์ถ๋ ฅํ ์ ์๋ ๊ฐ์ด ์๋๋ผ์
์ด ๋ช ๋ น์ ๋ค์ ๋ ์ค์ ํ๋๋ก ์์ ํ๋๊ฒ ์ ๋น.
๐ ๋ค์ GROUP BY ์ ์ ๋ถ์ฌ ๋ถ์๋ณ๋ก ๊ทธ๋ฃนํํ๋ฉด ๊ธฐ์ค ํ๋์ธ ๋ถ์๋ช ๋ ์ถ๋ ฅํ ์ ์๊ณ
๋ถ์์ ์๊ธ ์ดํฉ์ ๊ตฌํ๋ SUM ํจ์๋ ์ฌ์ฉํ ์ ์๋ค.
SELECT depart, SUM(salary) FROM tStaff GROUP BY depart;
SELECT SUM(salary) FROM tStaff;
4. HAVING
// ์์น ์์
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY
๐ HAVING์ GROUP BY ๋ค์์ ์ค๋ฉฐ ํต๊ณ ๊ฒฐ๊ณผ ์ค ์ถ๋ ฅํ ๊ทธ๋ฃน์ ์กฐ๊ฑด์ ์ง์ (์ฆ HAVING์ GROUP BY ๋ฌธ์ ์กฐ๊ฑด์ )
๐ ๋ถ์๋ณ ํ๊ท ์๊ธ์ ์ถ๋ ฅํ๋ ๋ช ๋ น์ ๋ณ๋ค๋ฅธ ์กฐ๊ฑด์ด ์์ผ๋ฉด ๋ชจ๋ ๋ถ์์ ํ๊ท ์๊ธ์ ์ถ๋ ฅ.
ํ๊ท ์๊ธ์ด 340์ ๋๋ ๋ถ์๋ง ์ถ๋ ฅํ๊ณ ์ถ๋ค๋ฉด GROUP BY ๋ค์์ HAVIING ์ ์ ์ถ๊ฐ.
SELECT depart, AVG(salary) FROM tStaff GROUP BY depart HAVING AVG(salary) >= 340;
๐ ๊ทธ๋ฃน๋ณ ํต๊ณ๋ฅผ ๋ฝ๊ณ ๊ทธ ๊ฒฐ๊ณผ์ ์์ HAVING ์กฐ๊ฑด์ ๋ง๋ ๋ ์ฝ๋๋ง ์ถ๋ ฅ.
ํ๊ท ์๊ธ์ด 327์ธ ์ธ์ฌ๊ณผ๋ ์ ์ธ.
๐ ์ถ๋ ฅ ์์๋ฅผ ์ง์ ํ ๋๋ ORDER BY ์ ์ ๋ค์ ๋ถ์ธ๋ค.
๐ GROUP BY ๋ค์์ HAVING์ด ์ค๊ณ ORDER BY๋ ํญ์ ์ ์ผ ๋ง์ง๋ง์ ์์นํ๋ค.
SELECT depart, AVG(salary) FROM tStaff
GROUP BY depart HAVING AVG(salary) >= 340
ORDER BY AVG(salary) DESC;
๐ WHERE ์ HAVING์ ์ ์ฉ ์์ ๊ณผ ์ ํ ๋์์ด ๋ค๋ฅด๋ค.
๐ WHERE ์ ์ GROUP BY ์์ ๋ํ๋๋ฉฐ ํต๊ณ ๋์ ๋ ์ฝ๋์ ์กฐ๊ฑด์ ์ ํํ๋ค.
SELECT depart, AVG(salary) FROM tStaff WHERE salary > 300 GROUP BY depart;
๐ ์๊ธ 300 ์ด๊ณผ ์กฐ๊ฑด์ ์ํด ์๊ธ 300 ์ดํ์ ์ง์์ ํ๊ท ์์ ์์ ์ ์ธ๋์ด ํ๊ท ๊ฐ์ด ๋ ๋๊ฒ ๋ํ๋จ. ๋ง์ฝ ๋ชจ๋ ์ง์์ ์๊ธ์ด 300 ์ดํ์ด๋ฉด ์ด ๋ถ์๋ ์์ ๊ฒฐ๊ณผ์ ์ ๋ํ๋์ง๊ณ ์์.
๐ HAVING ์ ์ GROUP BY ๋ค์์ ๋ํ๋๋ฉฐ ์ง๊ณํ ๊ฒฐ๊ณผ์ ์ ์กฐ๊ฑด์ ์ ํํ๋ค.
SELECT depart, AVG(salary) FROM tStaff WHERE salary > 300 GROUP BY depart
HAVING AVG(salary) >= 360 ORDER BY depart;
๐ ์๊ธ์ด 300 ์ด๊ณผ์ธ ์ง์๋ค์ ๋์์ผ๋ก ๋ถ์๋ณ ํ๊ท ์๊ธ์ ๊ตฌํ๊ณ ๊ทธ ๊ฒฐ๊ณผ ํ๊ท ์๊ธ์ด 360 ์ด์์ธ ๋ถ์๋ง ๊ณ ๋ฅธ ํ ๋ถ์๋ช ์ผ๋ก ์ ๋ ฌ
โก๏ธ ์ฒ๋ฆฌ์์
1. WHERE ์ ์ด ์ง์๋ชฉ๋ก์์ ์๊ธ 300์ดํ์ ์ง์์ ๋จผ์ ์ ๊ฑฐ
2. ๋ถ์๋ณ๋ก ๊ทธ๋ฃนํํ์ฌ AVG ํจ์๋ก ๋จ์ ์ง์์ ๋ถ์๋ณ ํ๊ท ์๊ธ์ ๊ณ์ฐ
3. HAVING ์ ์ ์ํด ํ๊ท ์๊ธ์ด ๋ฎ์ ๋ถ์๋ ์ ์ธ
4. ๋จ์ ๋ถ์๋ฅผ ORDER BY๊ฐ ์ ๋ ฌํ์ฌ ์ถ๋ ฅ
SELECT depart, MAX(salary) FROM tStaff WHERE depart IN ('์ธ์ฌ๊ณผ', '์์
๋ถ') GROUP BY depart;
SELECT depart, MAX(salary) FROM tStaff GROUP BY depart HAVING depart IN ('์ธ์ฌ๊ณผ', '์์
๋ถ');
๐ ๋ ์ฟผ๋ฆฌ ๋ชจ๋ ์ธ์ฌ๊ณผ์ ์์ ๋ถ์ ์ต๋ ์๊ธ์ ์กฐ์ฌ.
๐ ์กฐ๊ฑด์ ์ ์ฉํ๋ ์์ ์ ๋ค๋ฅด์ง๋ง ์กฐ๊ฑด์ ๋ด์ฉ์ ๊ฐ์ ์ต์ข ์คํ ๊ฒฐ๊ณผ๋ ๊ฐ์.
๐ก ๋ด๋ถ์ ์ธ ์คํ ๊ณผ์ ์ ์ฐจ์ด๊ฐ ์์
1. WHERE ์ ์ ์ง๊ณ์ ์ ์ด๋ฌด๋ถ๋ฅผ ์ ์ธํ์ฌ ๊ผญ ํ์ํ ๊ณ์ฐ๋ง ํจ.
2. HAVING ์ ์ ๋ชจ๋ ๋ถ์์ ์ง๊ณ๋ฅผ ๋ค ๋๋ธ ํ ์ด๋ฌด๋ถ๋ฅผ ์ ๊ฑฐํ๋ ์์ด๋ผ ์ถ๋ ฅํ์ง๋ ์์ ์ด๋ฌด๋ถ์ ์ง๊ณ๊น์ง ๊ณ์ฐํ์ฌ ๋นํจ์จ์
[ ๋ด์ฉ ์ฐธ๊ณ ; IT ํ์ ๊ฐ์ ]
'Database > MySQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[MySQL] DELETE ๋ฌธ (1) | 2024.02.24 |
---|---|
[MySQL] INSERT ๋ฌธ (0) | 2024.02.23 |
[MySQL] ์ง๊ณ ํจ์ (aggregate function) (0) | 2024.02.23 |
[MySQL] SELECT๋ฌธ | ORDER BY, DISTINCT, LIMIT, OFFSET FETCH (0) | 2024.02.23 |
[MySQL] SELECT๋ฌธ | WHERE, NULL, ๋ ผ๋ฆฌ์ฐ์ฐ์, LIKE, BETWEEN, IN (0) | 2024.02.23 |