GROUP BY ๊ตฌ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ์ฌ ํน์ ๊ธฐ์ค์ ๋ฐ๋ผ ์ง๊ณํ ์ ์๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ์ด๋ฒ ๊ธ์์๋ ๋ง๋ฆฌ์ DB์ GROUP BY ๊ตฌ๋ฌธ์ ์๊ฐํ๊ณ , ๊ทธ ํ์ฉ๋ฒ๊ณผ ์ค์์ฑ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
โฃ ๋ชฉ์ฐจ
GROUP BY ๊ตฌ๋ฌธ์ ๊ธฐ๋ณธ ๊ฐ๋ ๐
GROUP BY ๊ตฌ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ํน์ ์ด ๋๋ ์ด์ ์กฐํฉ์ ๋ฐ๋ผ ๊ทธ๋ฃนํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถํํ๊ณ ์ง๊ณํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฃผ๋ฌธ ๋ฐ์ดํฐ์์ ์ง์ญ๋ณ ํ๋งค๋์ ๊ตฌํ๊ฑฐ๋, ๊ณ ๊ฐ๋ณ๋ก ๊ตฌ๋งคํ ์ํ ์๋ฅผ ํ์ ํ๋ ๋ฑ์ ์์ ์ ์ ์ฉํฉ๋๋ค.
GROUP BY ๊ตฌ๋ฌธ์ ํ์ฉ๐ก
๊ธฐ๋ณธ์ ์ธ GROUP BY ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑ๋ฉ๋๋ค.
SELECT column_name, aggregate_function(column_name)
FROM table_name
GROUP BY column_name;
์ฌ๊ธฐ์ column_name์ ๊ทธ๋ฃนํํ ์ด์, aggregate_function์ ๊ทธ๋ฃนํ๋ ๋ฐ์ดํฐ์ ๋ํด ์ ์ฉํ ์ง๊ณ ํจ์๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ๊ณ ์ง๊ณํ ์ ์์ต๋๋ค.
GROUP BY์ ์ง๊ณ ํจ์๐
GROUP BY์ ์ง๊ณ ํจ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด๋ค์ ํจ๊ป ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ๊ณ ํ์ํ ํต๊ณ๋์ ๊ณ์ฐํ ์ ์์ต๋๋ค. ์ฃผ์ํ ์ง๊ณ ํจ์์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ์์ต๋๋ค.
- COUNT: ๊ทธ๋ฃน ๋ด์ ํ ์๋ฅผ ์ธ๋ ํจ์์ ๋๋ค. ์ฃผ๋ก ํน์ ์ด์ ๊ฐ์๋ฅผ ์ธ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- SUM: ๊ทธ๋ฃน ๋ด์ ์ด์ ํฉ๊ณ๋ฅผ ๊ณ์ฐํ๋ ํจ์์ ๋๋ค. ์๋ฅผ ๋ค์ด, ๋งค์ถ ๋ฐ์ดํฐ์์ ๋งค์ถ์ก์ ์ด ํฉ์ ๊ตฌํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- AVG: ๊ทธ๋ฃน ๋ด์ ์ด์ ํ๊ท ๊ฐ์ ๊ณ์ฐํ๋ ํจ์์ ๋๋ค. ํ๊ท ์ฃผ๋ฌธ ๊ฐ๊ฒฉ์ด๋ ํ๊ท ๊ณ ๊ฐ ๋ง์กฑ๋ ๋ฑ์ ๊ณ์ฐํ ๋ ์ ์ฉํฉ๋๋ค.
- MIN/MAX: ๊ทธ๋ฃน ๋ด์ ์ด์์ ๊ฐ์ฅ ์์ ๊ฐ ๋๋ ๊ฐ์ฅ ํฐ ๊ฐ์ด ๋ฌด์์ธ์ง๋ฅผ ์ฐพ๋ ํจ์์ ๋๋ค. ์ต์ ์ฃผ๋ฌธ ๊ธ์ก์ด๋ ์ต๊ณ ๋งค์ถ์ก ๋ฑ์ ํ์ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
์ฌ์ฉ ์์
์๋๋ ๊ฐ๋จํ GROUP BY์ ์ง๊ณ ํจ์์ ์ฌ์ฉ ์์์ ๋๋ค.
-- ์ฃผ๋ฌธ ๋ฐ์ดํฐ์์ ์ง์ญ๋ณ ์ฃผ๋ฌธ ์ ์ธ๊ธฐ
SELECT `region`, COUNT(*) AS `order_count`
FROM `orders`
GROUP BY `region`;
-- ์ ํ ๋ฐ์ดํฐ์์ ์นดํ
๊ณ ๋ฆฌ๋ณ ํ๊ท ๊ฐ๊ฒฉ ๊ณ์ฐ
SELECT `category`, AVG(`price`) AS `avg_price`
FROM `products`
GROUP BY `category`;
GROUP BY์ ํ์ฉ ์ฌ๋ก๐ผ
์์ ๋ฐ์ดํฐ
sales ํ ์ด๋ธ
region | sales_amount |
---|---|
East | 1500 |
West | 2200 |
North | 1800 |
South | 2000 |
East | 1200 |
West | 2500 |
North | 1600 |
South | 1900 |
products ํ
์ด๋ธ
category | price |
---|---|
Electronics | 1000 |
Electronics | 1200 |
Clothing | 50 |
Clothing | 80 |
Books | 20 |
Books | 25 |
orders ํ
์ด๋ธ
order_date | total_amount |
---|---|
2024-01-05 | 300 |
2024-01-10 | 500 |
2024-02-15 | 700 |
2024-02-20 | 450 |
2024-03-03 | 600 |
2024-03-08 | 350 |
customers ํ
์ด๋ธ
customer_id | age |
---|---|
1 | 28 |
2 | 35 |
3 | 19 |
4 | 42 |
5 | 50 |
6 | 22 |
์ฟผ๋ฆฌ ๋ฐ ๊ฒฐ๊ณผ
1. ์ง์ญ๋ณ ํ๋งค๋ ๋ถ์
SELECT `region`, SUM(`sales_amount`) AS `total_sales`
FROM `sales`
GROUP BY `region`;
region | total_sales |
---|---|
East | 2700 |
West | 4700 |
North | 3400 |
South | 3900 |
2. ์นดํ
๊ณ ๋ฆฌ๋ณ ํ๊ท ๊ฐ๊ฒฉ ๋ถ์
SELECT `category`, AVG(`price`) AS `avg_price`
FROM `products`
GROUP BY `category`;
category | avg_price |
---|---|
Electronics | 1100 |
Clothing | 65 |
Books | 22.5 |
3. ์๋ณ ์ฃผ๋ฌธ๋ ๋ถ์
SELECT MONTH(`order_date`) AS `month`, COUNT(*) AS `total_orders`
FROM `orders`
GROUP BY MONTH(`order_date`);
month | total_orders |
---|---|
1 | 2 |
2 | 2 |
3 | 2 |
4. ๊ณ ๊ฐ ์ธ๋ถํ
SELECT CASE
WHEN `age` <= 25 THEN 'Youth'
WHEN `age` BETWEEN 26 AND 40 THEN 'Adult'
ELSE 'Senior'
END AS `customer_segment`,
COUNT(*) AS `total_customers`
FROM `customers`
GROUP BY `customer_segment`;
customer_segment | total_customers |
---|---|
Youth | 2 |
Adult | 3 |
Senior | 1 |
์ฃผ์ํ ์ ๊ณผ ์ต์ ํ ํโ ๏ธ
์ฃผ์ํ ์
- ์ธ๋ฑ์ฑ: GROUP BY๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ์ ํ ์ธ๋ฑ์ค๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ทธ๋ฃนํ๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์์ด ์ฑ๋ฅ์ ํฅ์ํ ์ ์์ต๋๋ค.
- GROUP BY์ ์์: GROUP BY ๊ตฌ๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก WHERE ์ ๋ค์์ ์ค๋ฉฐ, ORDER BY ์ ์ด์ ์ ์์นํฉ๋๋ค. ์ด ์์๋ฅผ ์งํค์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ์ง๊ณ ํจ์ ์ฌ์ฉ: GROUP BY์ ํจ๊ป ์ง๊ณ ํจ์๋ฅผ ์ฌ์ฉํ ๋๋ ์ฃผ์ํด์ผ ํฉ๋๋ค. ์ง๊ณ ํจ์๋ฅผ ์ฌ์ฉํ ์ด์ด๋ ๊ทธ๋ฃนํํ ์ด์ ๋ช ํํ๊ฒ ์ง์ ํด์ผ ํฉ๋๋ค.
- NULL ๊ฐ ์ฒ๋ฆฌ: GROUP BY๋ NULL ๊ฐ์ ๊ทธ๋ฃนํํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ NULL ๊ฐ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง์ ๋ํ ์ ๋ต์ ์ธ์์ผ ํฉ๋๋ค.
์ต์ ํ ํ
- ๋ฐ์ดํฐ ์ ์ ํ: ๊ฐ๋ฅํ ๊ฒฝ์ฐ GROUP BY๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ฐ์ดํฐ ์์ ์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. WHERE ์ ์ ์ฌ์ฉํ์ฌ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ํํฐ๋งํ๊ณ ๊ทธ ๋ค์์ GROUP BY๋ฅผ ์ ์ฉํฉ๋๋ค.
- ๋ณ๋ ฌ ์ฒ๋ฆฌ ํ์ฉ: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ด ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ ๊ฒฝ์ฐ, GROUP BY ์ฐ์ฐ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํ์ฉํ์ฌ ์ฟผ๋ฆฌ์ ์ฒ๋ฆฌ ์๋๋ฅผ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ์ ์ ํ ๋ฐ์ดํฐ ์ ํ ์ฌ์ฉ: ๊ทธ๋ฃนํํ ์ด์ ๋ฐ์ดํฐ ์ ํ์ ์ ์ ํ๊ฒ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ฌธ์์ด๋ณด๋ค๋ ์ซ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ๋ ๊ฒ์ด ์ฑ๋ฅ์ ๋ ์ ๋ฆฌํฉ๋๋ค.
- ํ์ ์ฟผ๋ฆฌ ์ฌ์ฉ ์ต์ํ: GROUP BY๋ฅผ ์ฌ์ฉํ ๋ ํ์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๊ฐ๋ฅํ ํ ํ๋์ ์ฟผ๋ฆฌ๋ก ์์ฑํ๋ ๊ฒ์ด ์ฑ๋ฅ์ ๋ ์ ๋ฆฌํฉ๋๋ค.
ํต์ฌ ๋ด์ฉ๐