๐ก
GROUP BY์ ์ ๊ฒฐ๊ณผ ์งํฉ์ํน์ ์ด์ ๊ฐ์ ๋ฐ๋ผ๊ทธ๋ฃนํํ๋๋ฐ ์ฌ์ฉ๋๋ค.HAVING์ GROUP BY ์ ๊ณผ ํจ๊ป ์ฌ์ฉํด์ผ ํ๋ฉฐ ๊ทธ๋ฃน์ ๋ํ ์กฐ๊ฑด์ ์ ์ฉํ๋๋ฐ ์ฌ์ฉ๋๋ค.
GROUP BY + ( Having | Rollup )
โ
GROUP BY๋ฅผ ํ์ฉํ ๋ฉ๋ด๊ฐ ์กด์ฌํ๋ ์นดํ
๊ณ ๋ฆฌ ๊ทธ๋ฃน ์กฐํ
โก๏ธ GROUP BY ๋ก ์ธํ ๊ทธ๋ฃน ์ค๋ณต ์ ๊ฑฐ
SELECT
category_code
FROM tbl_menu
GROUP BY category_code;
โก๏ธ COUNT ํจ์ ํ์ฉ
SELECT
category_code
, COUNT(*)
FROM tbl_menu
GROUP BY category_code;
์คํ๊ฒฐ๊ณผ
โก๏ธ SUM ํจ์ ํ์ฉ
SELECT
category_code
, SUM(menu_price)
FROM tbl_menu
GROUP BY category_code;
์คํ๊ฒฐ๊ณผ
โก๏ธ AVG ํจ์ ํ์ฉ
SELECT
category_code
, AVG(menu_price)
FROM tbl_menu
GROUP BY category_code;
์คํ๊ฒฐ๊ณผ
โก๏ธ 2๊ฐ ์ด์์ ๊ทธ๋ฃน ์์ฑ
SELECT
menu_price
, category_code
FROM tbl_menu
GROUP BY menu_price, category_code;
์คํ๊ฒฐ๊ณผ
โก๏ธ join๊ณผ ํจ๊ป ์ฌ์ฉ
SELECT
a.category_code
, b.category_name
, AVG(a.menu_price)
FROM tbl_menu a
JOIN tbl_category b ON (a.category_code = b.category_code)
GROUP BY a.category_code, b.category_name;
์คํ๊ฒฐ๊ณผ
โ
HAVING์ ํ์ฉํด 5๋ฒ(์ค์) ์นดํ
๊ณ ๋ฆฌ๋ถํฐ 8๋ฒ(์ปคํผ) ์นดํ
๊ณ ๋ฆฌ๊น์ง์ ๋ฉ๋ด ์นดํ
๊ณ ๋ฆฌ ๋ฒํธ ์กฐํ
SELECT
category_code
FROM tbl_menu
GROUP BY category_code
HAVING category_code BETWEEN 5 AND 8;
์คํ๊ฒฐ๊ณผ
( ์ค๊ฐ์ง๊ณ )
โ
์ปฌ๋ผ ํ ๊ฐ๋ฅผ ํ์ฉํ ROLLUP (์นดํ
๊ณ ๋ฆฌ๋ณ ์ดํฉ)
SELECT
category_code
, SUM(menu_price)
FROM tbl_menu
GROUP BY category_code
WITH ROLLUP;
์คํ๊ฒฐ๊ณผ
โ
์ปฌ๋ผ ๋ ๊ฐ๋ฅผ ํ์ฉํ ROLLUP (๊ฐ์ ๋ฉ๋ด ๊ฐ๊ฒฉ๋ณ ์ดํฉ ๋ฐ ํด๋น ๋ฉ๋ด ๊ฐ๊ฒฉ๋ณ ๊ฐ์ ์นดํ
๊ณ ๋ฆฌ์ ์ดํฉ๊ณผ ์ ์ฒด ) ROLLUP์ ํตํด ๋จผ์ ๋์จ ์ปฌ๋ผ์ ์ดํฉ์ ๊ตฌํ๊ณ ์ดํ ๋์ค๋ ์ปฌ๋ผ๊ณผ์ ํฉ๋ ๊ตฌํ๋ ๋ฐฉ์์ด๋ค.
SELECT
menu_price
, category_code
, SUM(menu_price)
FROM tbl_menu
GROUP BY menu_price, category_code
WITH ROLLUP;
์คํ๊ฒฐ๊ณผ
โ ์ฐ๋๋ณ, ์๋ณ, ์ํ๋ณ ํฉ๊ณ๋ฅผ ๊ตฌํ ์๋ ์๋ค.
CREATE TABLE sales (
code INT AUTO_INCREMENT,
year VARCHAR(4),
month VARCHAR(2),
product VARCHAR(50),
amount DECIMAL(10,2),
PRIMARY KEY(code)
);
INSERT INTO sales (code, year, month, product, amount) VALUES
(null, '2023', LPAD('1', 2, '0'), 'Product A', 1000.00),
(null, '2023', LPAD('1', 2, '0'), 'Product B', 1500.00),
(null, '2023', LPAD('2', 2, '0'), 'Product A', 2000.00),
(null, '2023', LPAD('2', 2, '0'), 'Product B', 2500.00),
(null, '2023', LPAD('3', 2, '0'), 'Product A', 1200.00),
(null, '2024', LPAD('3', 2, '0'), 'Product B', 1700.00);
SELECT
year
, month
, product
, SUM(amount) AS total_sales
FROM sales
GROUP BY year, month, product WITH ROLLUP;
์คํ๊ฒฐ๊ณผ