티스토리 뷰

 

 

📌 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개입니다.

 

 

 

 

 

반응형