티스토리 뷰
📌 SQL GROUP BY 설명
GROUP BY는 결과 집합을 하나 이상의 열을 기준으로 그룹화하여 요약 정보를 추출할 때 사용됩니다.
주로 집계 함수(SUM, COUNT, AVG, MAX, MIN)와 함께 사용되어 특정 기준에 따라 데이터를 그룹화하고
요약 정보를 제공합니다.
📌 기본 문법
SELECT column_name, aggregate_function(column_name)
FROM table_name
GROUP BY column_name;
- column_name: 데이터를 그룹화할 열의 이름
- aggregate_function: SUM, COUNT, AVG 등 데이터를 요약하는 함수
📌 사용 예제
1. 부서별 직원 수를 계산
SELECT department_id, COUNT(*)
FROM employees
GROUP BY department_id;
-
- 이 쿼리는 각 부서(department_id)에 속한 직원 수를 계산합니다.
2. 카테고리별 총 매출을 계산
SELECT category, SUM(sales_amount)
FROM sales
GROUP BY category;
-
- 이 쿼리는 category별로 sales_amount의 합계를 계산하여 각 카테고리의 총 매출을 보여줍니다.
3. 도시별 평균 급여를 계산
SELECT city, AVG(salary)
FROM employees
GROUP BY city;
-
- 이 쿼리는 city별로 평균 급여를 계산합니다.
4. 날짜별 주문 수를 계산
SELECT order_date, COUNT(order_id)
FROM orders
GROUP BY order_date;
-
- 이 쿼리는 order_date별로 주문의 개수를 계산합니다.
📌 GOOD 사용법
1. 요약 통계를 추출할 때
-
- GROUP BY는 특정 기준으로 데이터를 요약할 때 매우 유용합니다.
- 예: 제품 카테고리별로 평균 가격을 구할 때.
SELECT category, AVG(price)
FROM products
GROUP BY category;
2. 집계 함수와 함께 사용
-
- SUM, COUNT, AVG 등과 함께 사용하여 데이터를 요약할 수 있습니다.
- 예: 부서별 최대 급여를 찾을 때.
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id;
📌 BAD 사용법
1. SELECT 절과 GROUP BY 간 일관성이 없을 때
-
- GROUP BY를 사용할 때, SELECT 절에 포함된 열은 집계 함수와 함께 사용되거나 GROUP BY에 포함되어야 합니다.
-- 잘못된 예시
SELECT department_id, salary
FROM employees
GROUP BY department_id;
-
- 이 경우, salary는 집계 함수로 감싸지 않아서 오류가 발생합니다. salary에 대해 AVG, SUM 등의 집계 함수를 사용해야 합니다.
2. 의미 없는 그룹화를 사용할 때
-
- 데이터를 요약할 필요가 없거나, 모든 데이터를 한 그룹으로 묶는 것은 비효율적입니다.
-- 잘못된 예시
SELECT COUNT(*)
FROM employees
GROUP BY 1;
-
- 모든 데이터를 하나의 그룹으로 묶는 것은 불필요한 그룹화이며, GROUP BY 없이 COUNT(*)만 사용하는 것이 더 적절합니다.
📌 데이터 예시
1. 부서별 급여 합계 계산 예제
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(255),
department_id INT,
salary DECIMAL(10, 2)
);
INSERT INTO employees (id, name, department_id, salary) VALUES
(1, 'Alice', 1, 5000),
(2, 'Bob', 2, 4000),
(3, 'Charlie', 1, 4500),
(4, 'David', 3, 6000);
SELECT department_id, SUM(salary)
FROM employees
GROUP BY department_id;
-
- 이 쿼리는 각 부서의 총 급여를 계산합니다.
- 결과는 department_id 1의 총 급여는 9500, 2는 4000, 3은 6000입니다.
2. 카테고리별 제품 수 계산 예제
CREATE TABLE products (
id INT PRIMARY KEY,
product_name VARCHAR(255),
category VARCHAR(100)
);
INSERT INTO products (id, product_name, category) VALUES
(1, 'Laptop', 'Electronics'),
(2, 'Tablet', 'Electronics'),
(3, 'Sofa', 'Furniture'),
(4, 'Chair', 'Furniture'),
(5, 'Book', 'Books');
SELECT category, COUNT(*)
FROM products
GROUP BY category;
-
- 이 쿼리는 각 category별 제품의 개수를 계산합니다.
- 결과는 Electronics는 2개, Furniture는 2개, Books는 1개입니다.
반응형