0Pricing
Digital Marketing Academy · 강의

마케팅 테이블 조인하기

세션, 사용자, 주문

마케팅 테이블 조인하기은(는) CoddyKit의 무료 Digital Marketing Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Digital Marketing Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Digital Marketing Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

왜 JOIN을 사용할까요?

실제 질문은 여러 테이블에 걸쳐 있습니다. 지출은 캠페인에, 매출은 주문에, 특성은 사용자에 저장되어 있습니다. 세그먼트별 ROAS나 LTV를 계산하려면 이 데이터를 결합해야 합니다.

JOIN은 user_id나 campaign_id처럼 공통 키를 기준으로 두 테이블의 행을 일치시킵니다.

SELECT o.order_id, u.country
FROM orders o
JOIN users u ON o.user_id = u.user_id;

INNER JOIN

INNER JOIN은 두 테이블 모두에서 일치하는 행만 반환합니다. 일치하는 사용자가 없는 주문이나 주문이 없는 사용자는 제외됩니다.

구매자처럼 양쪽에 모두 존재하는 레코드만 관심 대상일 때 사용합니다.

SELECT u.user_id, u.country, SUM(o.revenue) AS revenue
FROM users u
JOIN orders o ON o.user_id = u.user_id
GROUP BY u.user_id, u.country;

LEFT JOIN

LEFT JOIN은 오른쪽 테이블에 일치하는 행이 없어도 왼쪽 테이블의 모든 행을 유지합니다. 누락된 값은 NULL로 반환됩니다.

이를 사용하면 한 번도 주문하지 않은 사용자나 전환으로 이어지지 않은 세션을 찾을 수 있습니다.

SELECT u.user_id, COALESCE(SUM(o.revenue), 0) AS revenue
FROM users u
LEFT JOIN orders o ON o.user_id = u.user_id
GROUP BY u.user_id;

빠진 항목 찾기

LEFT JOIN을 NULL 확인과 함께 사용하면 일치하지 않는 항목만 추려낼 수 있습니다. "가입했지만 한 번도 구매하지 않은 사용자는 누구인가요?"는 대표적인 리텐션 질문입니다.

오른쪽 값이 NULL이라는 것은 일치하는 주문이 없었다는 뜻입니다.

SELECT u.user_id, u.signup_date
FROM users u
LEFT JOIN orders o ON o.user_id = u.user_id
WHERE o.order_id IS NULL;

세션과 주문 JOIN하기

세션과 주문을 연결하면 사용자의 행동과 결과를 함께 살펴볼 수 있습니다. user_id를 기준으로 일치시키면 어떤 유입이 결국 구매로 이어졌는지 확인할 수 있습니다.

이는 채널 기여 분석의 기초가 됩니다.

SELECT s.channel, SUM(o.revenue) AS revenue
FROM sessions s
JOIN orders o ON o.user_id = s.user_id
GROUP BY s.channel;

ROAS 계산하기

정확한 ROAS를 계산하려면 지출과 매출을 나란히 비교해야 합니다. campaign_id를 기준으로 캠페인과 주문을 JOIN한 다음 합계를 나눕니다.

NULLIF는 지출액이 0일 때 나누기 오류가 발생하지 않도록 합니다.

SELECT c.campaign_id,
       SUM(o.revenue) / NULLIF(SUM(c.spend), 0) AS roas
FROM campaigns c
LEFT JOIN orders o ON o.campaign_id = c.campaign_id
GROUP BY c.campaign_id;

테이블 별칭

별칭(orders에는 o, users에는 u)을 사용하면 여러 테이블을 다루는 쿼리를 짧고 명확하게 작성할 수 있습니다. 두 테이블에 같은 이름의 열이 있으면 항상 테이블을 명시해 열을 구분해야 합니다.

명확한 별칭을 사용하면 복잡한 JOIN을 훨씬 쉽게 읽고 오류를 수정할 수 있습니다.

SELECT c.name AS campaign, SUM(o.revenue) AS revenue
FROM campaigns c
JOIN orders o ON o.campaign_id = c.campaign_id
GROUP BY c.name;

세 테이블 JOIN하기

JOIN을 연이어 사용하면 두 개가 넘는 테이블을 결합할 수 있습니다. 여기서는 캠페인, 주문, 사용자를 연결하여 국가별 매출을 세그먼트로 나눕니다.

각 JOIN은 새 테이블을 기존 데이터 집합에 연결하는 또 하나의 ON 조건을 추가합니다.

SELECT c.name, u.country, SUM(o.revenue) AS revenue
FROM campaigns c
JOIN orders o ON o.campaign_id = c.campaign_id
JOIN users u ON u.user_id = o.user_id
GROUP BY c.name, u.country;

행 단위 확인하기

일대다 관계를 JOIN하면 행 수가 늘어나 합계가 부풀려질 수 있습니다. 한 캠페인에 주문이 여러 건 있으면 주문별로 지출을 합산할 때 같은 지출이 중복 계산됩니다.

각 측을 따로 집계한 다음 합계를 JOIN하여 수치가 정확하게 유지되도록 하세요.

SELECT c.campaign_id, c.total_spend, r.revenue
FROM campaigns c
JOIN (
  SELECT campaign_id, SUM(revenue) AS revenue
  FROM orders GROUP BY campaign_id
) r ON r.campaign_id = c.campaign_id;

첫 접점 기여 분석

사용자가 처음 유입된 채널에 기여도를 부여하려면 각 사용자의 가장 이른 세션을 찾은 다음 해당 세션을 주문과 JOIN합니다.

하위 쿼리로 첫 접점을 분리한 후 매출을 JOIN할 수 있습니다.

SELECT f.channel, SUM(o.revenue) AS revenue
FROM (
  SELECT DISTINCT ON (user_id) user_id, channel
  FROM sessions ORDER BY user_id, session_date
) f
JOIN orders o ON o.user_id = f.user_id
GROUP BY f.channel;

실전에서의 JOIN

마케팅 SQL에서 JOIN은 강력한 분석을 가능하게 하는 핵심입니다. 지출과 매출을 결합하면 ROAS를, 세션과 주문을 결합하면 기여도를, 사용자와 주문을 결합하면 세그먼트별 LTV를 계산할 수 있습니다.

양쪽 데이터가 모두 있어야 하면 INNER를 사용하고, 왼쪽 데이터를 유지하면서 빠진 항목을 살펴보려면 LEFT를 사용하세요.

빠른 확인

가입한 모든 사용자를 표시하되, 한 번도 주문하지 않은 사용자도 포함하려고 합니다. 어떤 JOIN을 사용해야 하나요?

복습

INNER JOIN은 양쪽에서 일치하는 행을 유지하고, LEFT JOIN은 왼쪽의 모든 행을 유지하면서 빠진 항목을 보여 줍니다. 별칭과 테이블을 명시한 열을 사용하면 쿼리를 깔끔하게 유지할 수 있습니다.

일대다 JOIN에서 행이 불필요하게 늘어나는 함정을 주의하고, 합계가 정확하도록 미리 집계하세요. 다음으로 코호트 및 퍼널 쿼리를 알아봅니다.

자주 묻는 질문

“마케팅 테이블 조인하기” 강의는 무료인가요?

네 — “마케팅 테이블 조인하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Digital Marketing Academy 강의 전체를 잠금 해제할 수 있습니다. Digital Marketing Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“마케팅 테이블 조인하기”에서 뭘 배우나요?

세션, 사용자, 주문 브라우저에서 직접 실행하는 실습 코드로 Digital Marketing Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Digital Marketing Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Digital Marketing Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“마케팅 테이블 조인하기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Digital Marketing Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Digital Marketing Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 마케터가 SQL을 배우는 이유
  2. SELECT, WHERE, GROUP BY
  3. 마케팅 테이블 조인하기
  4. 코호트 및 퍼널 쿼리
← Digital Marketing Academy(으)로 돌아가기