Łączenie tabel marketingowych
Sesje, użytkownicy i zamówienia
Łączenie tabel marketingowych to bezpłatna lekcja Digital Marketing Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Digital Marketing Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Digital Marketing Academy zawiera 4 lekcji w sumie.
Po co używać JOIN?
Rzeczywiste pytania często dotyczą wielu tabel. Wydatki znajdują się w kampaniach, przychody w zamówieniach, a cechy użytkowników w tabeli users. Aby obliczyć ROAS lub LTV według segmentu, trzeba je połączyć.
JOIN dopasowuje wiersze z dwóch tabel na podstawie wspólnego klucza, takiego jak user_id lub 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 zwraca tylko te wiersze, które mają dopasowanie w obu tabelach. Zamówienia bez pasującego użytkownika oraz użytkownicy bez zamówień zostają pominięci.
Należy użyć go wtedy, gdy interesują Państwa wyłącznie rekordy istniejące po obu stronach, na przykład kupujący.
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 zachowuje każdy wiersz z lewej tabeli, nawet jeśli po prawej stronie nie ma dopasowania. Brakujące wartości są zwracane jako NULL.
W ten sposób można znaleźć użytkowników, którzy nigdy nie złożyli zamówienia, lub sesje, które nigdy nie zakończyły się konwersją.
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;Znajdowanie brakujących dopasowań
Połączenie LEFT JOIN ze sprawdzeniem NULL pozwala wyodrębnić niedopasowane rekordy. Pytanie „które rejestracje nigdy nie doprowadziły do zakupu?” to klasyczny problem związany z retencją.
Wartość NULL po prawej stronie oznacza, że nie istniało żadne pasujące zamówienie.
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;Łączenie sesji z zamówieniami
Połączenie sesji z zamówieniami zestawia zachowanie z rezultatem. Dopasowanie po user_id pozwala sprawdzić, który ruch ostatecznie doprowadził do zakupu.
To podstawa analizy atrybucji kanałów.
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;Obliczanie ROAS
Rzeczywiste ROAS wymaga zestawienia wydatków i przychodu. Należy połączyć kampanie z zamówieniami po campaign_id, a następnie podzielić sumy.
NULLIF chroni przed dzieleniem przez zero wydatków.
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;Aliasy tabel
Aliasy (o dla orders, u dla users) sprawiają, że zapytania obejmujące wiele tabel są krótkie i jednoznaczne. Należy zawsze kwalifikować kolumny, gdy ta sama nazwa występuje w obu tabelach.
Jasne aliasy znacznie ułatwiają czytanie i debugowanie złożonych połączeń.
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;Łączenie trzech tabel
Można łączyć kolejne tabele za pomocą JOIN, aby zestawić więcej niż dwie tabele. W tym przypadku łączymy kampanie z zamówieniami, a następnie z użytkownikami, aby podzielić przychód według kraju.
Każdy JOIN dodaje kolejną klauzulę ON, która łączy nową tabelę z istniejącym zestawem.
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;Należy uważać na poziom szczegółowości
Łączenie relacji jeden-do-wielu może zwielokrotnić liczbę wierszy i zawyżyć sumy. Jeśli jedna kampania ma wiele zamówień, sumowanie wydatków przy każdym zamówieniu policzy je wielokrotnie.
Należy najpierw osobno zagregować obie strony, a następnie połączyć sumy, aby zachować wiarygodność danych.
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;Atrybucja pierwszego kontaktu
Aby przypisać zasługę pierwszemu kanałowi, z którego przyszedł użytkownik, należy znaleźć najwcześniejszą sesję każdego użytkownika, a następnie połączyć ją z jego zamówieniami.
Podzapytanie wyodrębnia pierwszy kontakt przed połączeniem z przychodem.
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 w praktyce
JOIN to miejsce, w którym SQL marketingowy pokazuje swoją siłę. Wydatki plus przychód dają ROAS, sesje plus zamówienia dają atrybucję, a użytkownicy plus zamówienia dają LTV według segmentu.
Należy wybrać INNER, gdy obie strony muszą istnieć, oraz LEFT, gdy chcą Państwo zachować wszystkie rekordy i przeanalizować brakujące dopasowania.
Szybkie sprawdzenie
Chcą Państwo wyświetlić każdego zarejestrowanego użytkownika, również tych, którzy nigdy nie złożyli zamówienia. Którego JOIN należy użyć?
Podsumowanie
INNER JOIN zachowuje dopasowania po obu stronach, a LEFT JOIN zachowuje wszystkie wiersze z lewej strony i ujawnia brakujące dopasowania. Aliasy oraz kwalifikowane nazwy kolumn pomagają utrzymać przejrzystość zapytań.
Należy uważać na pułapkę zwielokrotnienia przy złączeniach jeden-do-wielu; wstępna agregacja pozwala zachować poprawność sum. Następnie: zapytania dotyczące kohort i lejków.
Często zadawane pytania
Czy lekcja „Łączenie tabel marketingowych” jest bezpłatna?
Tak — pełny tekst „Łączenie tabel marketingowych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Digital Marketing Academy, przejdź na CoddyKit PRO. Kurs Digital Marketing Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Łączenie tabel marketingowych”?
Sesje, użytkownicy i zamówienia Ćwiczysz Digital Marketing Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Digital Marketing Academy?
Nie wymagamy żadnego doświadczenia. Digital Marketing Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Łączenie tabel marketingowych”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Digital Marketing Academy?
Tak. Każda lekcja Digital Marketing Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Dlaczego marketerzy uczą się SQL
- SELECT, WHERE, GROUP BY
- Łączenie tabel marketingowych
- Zapytania kohortowe i lejkowe