[DB] ๋ฐ์ดํฐ๋ฒ ์ด์ค MySQL - GROUP BY ์์ HAVING ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
MySQL์ GROUP BY์ HAVING์ ํจ๊ป
์ฌ์ฉํ์ฌ ์กฐ๊ฑด์ ๋ง๋ ๊ทธ๋ฃน์ ํํฐ๋งํ๋ ๋ฐฉ๋ฒ
GROUP BY๋ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ,
HAVING์ GROUP BY๋ก ๊ทธ๋ฃนํ๋ ๋ฐ์ดํฐ์ ์กฐ๊ฑด์ ์ ์ฉํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์๋ฅผ ๋ค์ด, ํ์ ํ
์ด๋ธ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.. ์ด ํ
์ด๋ธ์๋ ํ์ ์ด๋ฆ๊ณผ ๊ฐ ํ์์ ์ฑ์ ์ด ์๋ค.
(ํ๊ท ๊ฐ์ ๋ด๊ธฐ ์ํด ์ ์๋ฅผ ํ๋ฒ ๋ ์ถ๊ฐํ๋ค...(๋๋ฒ ์งธ insert ๋ฌธ))
INSERT INTO students (student_name, grade)
VALUES
('Alice', 90),
('Bob', 85),
('Charlie', 75),
('David', 95),
('Emma', 88),
('Frank', 82),
('Grace', 79),
('Henry', 91),
('Isabella', 87),
('Jack', 93);
INSERT INTO students (student_name, grade)
VALUES
('Alice', 70),
('Bob', 95),
('Charlie', 65),
('David', 85),
('Emma', 80),
('Frank', 89),
('Grace', 95),
('Henry', 71),
('Isabella', 77),
('Jack', 43);
๋จผ์ ํ์๋ค๋ณ๋ก ๊ทธ๋ฃนํ๋ฅผ ํ์ฌ
๊ทธ๋ค์ ํ๊ท ๊ฐ์ ๋ด์ด ๋ณธ๋ค.
SELECT student_name, AVG(grade) as average_grade
FROM students
GROUP BY student_name;
SELECT student_name, AVG(grade) as average_grade
FROM students
GROUP BY student_name
HAVING AVG(grade) > 85;
์์ ์ฟผ๋ฆฌ๋ ๊ฐ ํ์์ ํ๊ท ์ฑ์ ์ ๊ณ์ฐํ๊ณ , ๊ทธ๋ฃนํ๋ ๊ฒฐ๊ณผ์์ ํ๊ท ์ฑ์ ์ด 85๋ณด๋ค ํฐ ํ์๋ค๋ง ๋ฐํํ๋ค.
์ด ์ฟผ๋ฆฌ์์ ์ค์ํ ์ ์
GROUP BY๋ก ๊ทธ๋ฃนํ๋ ํ์
HAVING ์ ์์ ํ๊ท ์ฑ์ ์ ๋ํ ์กฐ๊ฑด์ ์ ์ฉํ๋ค๋ ๊ฒ์ด๋ค.
HAVING ์ ์ WHERE ์ ๊ณผ ์ ์ฌํ์ง๋ง,
WHERE์ ํ ๋จ์๋ก ์กฐ๊ฑด์ ์ ์ฉํ๋ ๋ฐ๋ฉด,
HAVING์ GROUP BY๋ก ๊ทธ๋ฃนํ๋ ๊ฒฐ๊ณผ์ ์กฐ๊ฑด์ ์ ์ฉํ๋ค.
์ด์ฒ๋ผ HAVING์ ์ฌ์ฉํ์ฌ ๊ทธ๋ฃนํ๋ ๋ฐ์ดํฐ์์ ํน์ ์กฐ๊ฑด์ ๊ฐ์ง ๊ทธ๋ฃน์ ์ ํํ ์ ์๋ค.