[sql] JOIN 결과에 집계 함수 사용하기

이번 포스트에서는 SQL에서 JOIN 결과에 집계 함수를 사용하는 방법에 대해 알아보겠습니다. JOIN은 여러 테이블을 결합하여 관련된 데이터를 가져오는 데 사용되며, 집계 함수는 그룹화된 데이터에 연산을 수행하는 데 사용됩니다. JOIN 결과에 집계 함수를 사용하여 데이터를 더욱 유용하게 분석할 수 있습니다.

1. INNER JOIN과 GROUP BY

가장 기본적인 방법은 INNER JOIN과 GROUP BY를 함께 사용하는 것입니다. 아래의 예제는 주문 테이블과 제품 테이블을 INNER JOIN하여 각 제품의 주문된 수량을 조회하는 쿼리입니다.

SELECT p.product_name, SUM(o.quantity) AS total_quantity
FROM products p
INNER JOIN orders o ON p.product_id = o.product_id
GROUP BY p.product_name;

위 쿼리에서 INNER JOIN을 통해 두 테이블을 결합하고, GROUP BY를 사용하여 제품별 주문된 수량을 계산합니다.

2. LEFT JOIN과 COALESCE

만약 JOIN한 테이블 중 일부가 매칭되는 결과가 없을 수 있다면, LEFT JOIN과 COALESCE 함수를 사용하여 NULL 값을 다른 값으로 대체할 수 있습니다. 아래의 예제는 모든 부서와 그에 속하는 직원의 수를 조회하는 쿼리입니다.

SELECT d.department_name, COALESCE(COUNT(e.employee_id), 0) AS employee_count
FROM departments d
LEFT JOIN employees e ON d.department_id = e.department_id
GROUP BY d.department_name;

위 쿼리에서 LEFT JOIN을 통해 부서와 직원 테이블을 결합하고, COALESCE를 사용하여 직원 수가 0인 경우에도 결과에 포함되도록 합니다.

3. Subquery와 JOIN

또 다른 방법으로는 Subquery를 사용하는 것입니다. 아래의 예제는 평균 주문 금액보다 많이 주문한 고객들의 정보를 조회하는 쿼리입니다.

SELECT c.customer_id, c.customer_name
FROM customers c
WHERE c.customer_id IN (
    SELECT o.customer_id
    FROM orders o
    GROUP BY o.customer_id
    HAVING SUM(o.order_amount) > (SELECT AVG(order_amount) FROM orders)
);

위 쿼리에서는 Subquery를 사용하여 평균 주문 금액보다 많이 주문한 고객의 ID를 조회하고, 이를 바깥 쿼리에서 실제 고객 정보와 JOIN하여 결과를 가져옵니다.

JOIN 결과에 집계 함수를 사용하는 방법에 대해 알아보았습니다. 이를 통해 데이터를 조인하고 그룹화하면서 실제 비즈니스상의 유용한 정보를 더욱 쉽게 얻을 수 있습니다.