n8n SQL 심화 이해하기: 고급 쿼리와 트랜잭션

목차

    n8n SQL 심화 이해하기: 고급 쿼리와 트랜잭션

    "고객별 총 매출"을 알고 싶습니다. SELECT만으로 될까요?

    JOIN으로 테이블을 합치고, GROUP BY로 고객별로 묶고, SUM()으로 합계를 구합니다.

    이 글을 다 읽으면 월별 매출, 고객별 구매금액, 재구매율을 쿼리 한 줄로 뽑을 수 있습니다.

    ① n8n SQL JOIN — 테이블 합치기

    🎭 왜왜씨와 딱딱씨의 대화
    🤔
    왜왜씨

    JOIN이 뭔가요?

    🎯
    딱딱씨

    두 테이블을 합치는 것이야! 예를 들어 "고객 테이블"과 "주문 테이블"을 연결해서 "어떤 고객이 뭘 주문했는지" 한 번에 볼 수 있지.

    JOIN 종류

    종류 설명 결과
    INNER JOIN 양쪽 모두에 있는 것만 교집합
    LEFT JOIN 왼쪽 테이블 전체 + 오른쪽 매칭 왼쪽 기준
    RIGHT JOIN 오른쪽 테이블 전체 + 왼쪽 매칭 오른쪽 기준

    JOIN 예시

    -- 고객 정보와 주문 정보 연결
    SELECT
        customers.name,
        customers.email,
        orders.order_date,
        orders.total_amount
    FROM customers
    INNER JOIN orders ON customers.id = orders.customer_id;
    
    -- 주문이 없는 고객도 포함
    SELECT
        customers.name,
        orders.order_date
    FROM customers
    LEFT JOIN orders ON customers.id = orders.customer_id;
    

    ② n8n SQL 집계 함수 — COUNT, SUM, AVG

    여러 행의 데이터를 하나의 값으로 계산합니다.

    주요 집계 함수

    함수 설명 예시
    COUNT(*) 행 개수 총 주문 건수
    SUM(column) 합계 총 매출액
    AVG(column) 평균 평균 주문금액
    MAX(column) 최대값 최고 금액 주문
    MIN(column) 최소값 최저 금액 주문
    -- 전체 주문 건수
    SELECT COUNT(*) as total_orders FROM orders;
    
    -- 총 매출액
    SELECT SUM(total_amount) as total_sales FROM orders;
    
    -- 평균 주문 금액
    SELECT AVG(total_amount) as avg_order FROM orders;
    

    ③ n8n SQL GROUP BY — 고객별, 월별 집계

    특정 기준으로 그룹화하여 집계합니다.

    GROUP BY 예시

    -- 카테고리별 상품 개수
    SELECT category, COUNT(*) as product_count
    FROM products
    GROUP BY category;
    
    -- 월별 매출 집계
    SELECT
        DATE_FORMAT(order_date, '%Y-%m') as month,
        SUM(total_amount) as monthly_sales
    FROM orders
    GROUP BY DATE_FORMAT(order_date, '%Y-%m');
    
    -- 고객별 총 주문금액 (상위 10명)
    SELECT
        customer_id,
        SUM(total_amount) as total_spent
    FROM orders
    GROUP BY customer_id
    ORDER BY total_spent DESC
    LIMIT 10;
    

    HAVING: 그룹 필터링

    -- 100만원 이상 구매한 고객만
    SELECT
        customer_id,
        SUM(total_amount) as total_spent
    FROM orders
    GROUP BY customer_id
    HAVING SUM(total_amount) >= 1000000;
    

    WHERE는 그룹화 전 필터링, HAVING은 그룹화 후 필터링!

    ④ n8n SQL 서브쿼리 — 쿼리 안에 쿼리

    쿼리 안에 또 다른 쿼리를 넣는 것입니다.

    서브쿼리 예시

    -- 평균보다 높은 금액의 주문
    SELECT * FROM orders
    WHERE total_amount > (SELECT AVG(total_amount) FROM orders);
    
    -- 최근 주문한 고객 정보
    SELECT * FROM customers
    WHERE id IN (
        SELECT DISTINCT customer_id
        FROM orders
        WHERE order_date > '2026-01-01'
    );
    
    -- 각 카테고리의 최고가 상품
    SELECT * FROM products p1
    WHERE price = (
        SELECT MAX(price)
        FROM products p2
        WHERE p1.category = p2.category
    );
    

    ⑤ n8n SQL 실전 쿼리 — 복사해서 바로 쓰기

    💡 예제 1: 오늘 주문 요약 리포트

    SELECT
        COUNT(*) as order_count,
        SUM(total_amount) as total_sales,
        AVG(total_amount) as avg_order
    FROM orders
    WHERE DATE(order_date) = '{{ $now.toFormat("yyyy-MM-dd") }}';
        

    💡 예제 2: 고객별 최근 주문 조회

    SELECT
        c.name,
        c.email,
        o.order_date,
        o.total_amount
    FROM customers c
    LEFT JOIN orders o ON c.id = o.customer_id
    WHERE o.order_date > '{{ $now.minus({days: 30}).toFormat("yyyy-MM-dd") }}'
    ORDER BY o.order_date DESC;
        

    💡 예제 3: 재구매율 높은 고객

    SELECT
        customer_id,
        COUNT(*) as order_count,
        SUM(total_amount) as total_spent
    FROM orders
    GROUP BY customer_id
    HAVING COUNT(*) >= 3
    ORDER BY total_spent DESC;
        
    🎯 딱딱씨의 팁

    복잡한 쿼리는 먼저 DB 툴에서 테스트한 후 n8n에 적용하세요!

    핵심 정리

    JOIN - 테이블 연결
    집계 함수 - COUNT, SUM, AVG
    GROUP BY - 그룹별 집계
    서브쿼리 - 쿼리 중첩

    3초 선택 가이드

    두 테이블 합치기? → JOIN ... ON
    총합/평균/개수? → SUM/AVG/COUNT
    고객별, 월별 집계? → GROUP BY
    집계 결과 필터링? → HAVING (WHERE 아님!)

    다음 글 예고

    👉 n8n 에러 핸들링 노드 : 안정적인 워크플로우 만들기


    SQL 심화를 익히면 데이터 분석 자동화가 가능합니다.
    복잡한 리포트도 SQL 한 줄로!

    댓글

    이 블로그의 인기 게시물

    n8n으로 업무 자동화 시작하기 : 왜 필요하고 어떻게 활용할까?

    n8n 데이터 처리 노드 : Set, Split, Merge 완벽 정리

    n8n 트리거 노드 : 3가지 유형으로 자동화 시작하기