Group by
[Database] SQL์์ GROUP BY, ORDER BY
ODERR BY
์๋ฏธ
์กฐํ ๊ฒฐ๊ณผ๋ฅผ ํน์ attribute(s)๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ์ฌ ๊ฐ์ ธ์ค๊ณ ์ถ์ ๋ ์ฌ์ฉํจ
default ์ ๋ ฌ ๋ฐฉ์์ ์ค๋ฆ์ฐจ์(ASC)
ASC : ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
DESC : ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
์ฌ์ฉ ์์
SELECT <์ถ์ถํ attributes> FROM <ํ ์ด๋ธ ๋ช > ORDER BY <์ ๋ ฌ ๊ธฐ์ค 1 attribute> [ASC or DESC] [, <์ ๋ ฌ ๊ธฐ์ค 2 attribute> [ASC or DESC]]์์ง์๋ค์ ์ ๋ณด๋ฅผ ์ฐ๋ด ์์๋๋ก ์ ๋ ฌํด์ ๊ฐ์ ธ์ค๊ธฐ
// ์ค๋ฆ์ฐจ์ SELECT * FROM employee ORDER BY salary; // ๋ด๋ฆผ์ฐจ์ SELECT * FROM employee ORDER BY salary DESC; // ์ฌ๋ฌ ๊ธฐ์ค (๋ถ์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ํ ์ฐ๋ด ๋ด๋ฆผ์ฐจ์) SELECT * FROM employee ORDER BY dept_id ASC, salary DESC;
aggregate function
์๋ฏธ
์ฌ๋ฌ tuple๋ค์ ์ ๋ณด๋ฅผ ์์ฝํด์ ํ๋์ ๊ฐ์ผ๋ก ์ถ์ถํ๋ ํจ์
COUNT, SUM, MAX, MIN, AVG
์ฃผ๋ก ๊ด์ฌ์๋ attribute์ ์ฌ์ฉ๋๋ฉฐ, NULL ๊ฐ๋ค์ ์ ์ธํ๊ณ ์์ฝ ๊ฐ์ ์ถ์ถํจ
SELECT์ ๊ฒฐ๊ณผ๋ฌผ๋ก ๋์ค๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ SELECT ์ ์ ํฌํจ์์ผ์ผ ํจ
์ฌ์ฉ ์์
SELECT COUNT (<attribute ์ด๋ฆ>) FROM <ํ ์ด๋ธ ๋ช >;<attribute ์ด๋ฆ>์ *๋ฅผ ๋ฃ์ผ๋ฉด ์ ์ฒด ํํ์ ๋์์ผ๋ก ํ๋ค๋ ๋ป. ํน์ attribute๋ฅผ ๋ฃ์ผ๋ฉด NULL ๊ฐ์ ์ ์ธํ๊ณ ์ฐ์ฐํ๊ฒ ๋จ์์ง์ ์๋ฅผ ์๊ณ ์ถ์ ๋
ํ๋ก์ ํธ 2002์ ์ฐธ์ฌํ ์์ง์ ์์ ์ต๋ ์ฐ๋ด๊ณผ ์ต์ ์ฐ๋ด๊ณผ ํ๊ท ์ฐ๋ด ๊ตฌํ๊ธฐ
GROUP BY
์๋ฏธ
๊ด์ฌ ์๋ attribute(s) ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃน์ ๋๋ ์ ๊ทธ๋ฃน๋ณ๋ก aggregate funcion์ ์ ์ฉํ๊ณ ์ถ์ ๋ ์ฌ์ฉํจ
grouping attribute(s) : ๊ทธ๋ฃน์ ๋๋๋ ๊ธฐ์ค์ด ๋๋ attribute. ์ฌ๋ฌ๊ฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃจํ ํ ์ ์์
grouping attribute์ NULL ์ด ์์ ๊ฒฝ์ฐ, NULL ๊ฐ์ ๊ฐ๋ tuple๋ผ๋ฆฌ ๋ฌถ์
์ฌ์ฉ ์์
๊ฐ ํ๋ก์ ํธ์ ์ฐธ์ฌํ ์์ง์ ์์ ์ต๋ ์ฐ๋ด๊ณผ ์ต์ ์ฐ๋ด๊ณผ ํ๊ท ์ฐ๋ด ๊ตฌํ๊ธฐ
works_on ๊ณผ employee ๋ฅผ JOIN ํ๊ณ
proj_id ๋ณ๋ก ๊ทธ๋ฃนํ์ ํ ๋ค์์
๊ทธ๋ฃน๋ณ๋ก proj_id, COUNT, MAX, MIN, AVG ๋ฅผ ๊ตฌํจ

HAVING
์๋ฏธ
๊ทธ๋ฃนํํ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ์ค์ ์กฐ๊ฑด์ ๊ฑธ์ด์ ๊ทธ ์กฐ๊ฑด์ ๋ถํฉํ๋ ๋์๋ง ๊ตฌํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
GROUP BY์ ํจ๊ป ์ฌ์ฉ
aggregate function์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํ์ผ๋ก ๊ทธ๋ฃน์ ํํฐ๋งํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
HAVING์ ์ ๋ช ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ทธ๋ฃน๋ง ๊ฒฐ๊ณผ์ ํฌํจ
์ฌ์ฉ ์์
ํ๋ก์ ํธ ์ฐธ์ฌ ์ธ์์ด 7๋ช ์ด์์ธ ํ๋ก์ ํธ๋ค์ ๋ํด์ ๊ฐ ํ๋ก์ ํธ์ ์ฐธ์ฌํ ์์ง์ ์, ์ต๋ ์ฐ๋ด, ์ต์ ์ฐ๋ด, ํ๊ท ์ฐ๋ด์ ์๊ณ ์ถ๋ค
์ฌ์ฉ ์์
๊ฐ ๋ถ์๋ณ ์ธ์์๋ฅผ ์ธ์ ์๊ฐ ๋ง์ ์์๋๋ก ์ ๋ ฌ
๊ฐ ๋ถ์๋ณ-์ฑ๋ณ ์ธ์์๋ฅผ ์ธ์์๊ฐ ๋ง์ ์์๋๋ก ์ ๋ ฌ
ํ์ฌ ์ ์ฒด ํ๊ท ์ฐ๋ด๋ณด๋ค ํ๊ท ์ฐ๋ด์ด ์ ์ ๋ถ์๋ค์ ํ๊ท ์ฐ๋ด์ ์๊ณ ์ถ๋ค
๊ฐ ํ๋ก์ ํธ๋ณ๋ก ํ๋ก์ ํธ์ ์ฐธ์ฌํ 90๋ ๋์๋ค์ ์์ ์ด๋ค์ ํ๊ท ์ฐ๋ด์ ์๊ณ ์ถ๋ค
ํ๋ก์ ํธ ์ฐธ์ฌ ์ธ์์ด 7๋ช ์ด์์ธ ํ๋ก์ ํธ์ ํ์ ํด์ ๊ฐ ํ๋ก์ ํธ๋ณ๋ก ํ๋ก์ ํธ์ ์ฐธ์ฌํ 90๋ ๋์๋ค์ ์์ ์ด๋ค์ ํ๊ท ์ฐ๋ด์ ์๊ณ ์ถ๋ค
GROUP BY ๋ค์ HAVING COUNT(*) >= 7 ๋ก ํ๋ฉด ์๋จ.
์ฌ๊ธฐ์์ COUNT๋ ํ๋ก์ ํธ ์ฐธ์ฌ ์ธ์์ด ์๋๋ผ, ํ๋ก์ ํธ์ ์ฐธ์ฌํ 90๋ ๋์ ์ธ์์ด๊ธฐ ๋๋ฌธ
SELECT ๋ก ์กฐํํ๊ธฐ ์์ฝ
SELECT attribute(s) or aggregate function(s): ๊ด์ฌ์๋ attribute๋ aggregate๋ฅผ ๋ฝ์์ฌ๊ฑฐ๋คFROM table(s): ์กฐํํ table or JOINํ table์ ์ง์ ํจ[WHERE condition(s)]: ๊ฐ์ ธ์ฌ tuple์ ์กฐ๊ฑด์ ํตํด์ ํํฐ๋ง ํจ[GROUP BY group attribute(s)]: ํํ๋ค์ ๊ทธ๋ฃนํ์ ํ๊ณ ์ถ์ ๋[HAVING group condition(s)]: ๊ทธ๋ฃนํ ๊ฒฐ๊ณผ๋ก ํน์ ๊ทธ๋ฃน๋ง ํํฐ๋ง ํ๊ณ ์ถ์ ๋[ORDER BY attribute(s)]: ์์ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํด์ ๊ฐ์ ธ์ค๊ณ ์ถ์ ๋
SELECT์ ๊ฐ๋
์ ์ธ ์คํ ์์
์๋๋ ๊ฐ๋ ์ ์ธ ์์์ผ ๋ฟ, ์ค์ ์คํ ์์๋ RDBMS์ ๊ตฌํ์ ๋ฐ๋ผ ๋ค๋ฆ
SELECT attribute(s) or aggregate function(s)
FROM table(s)
[WHERE condition(s)]
[GROUP BY group attribute(s)]
[HAVING group condition(s)]
[ORDER BY attribute(s)]
Last updated