Which Channel Converts Best?
Kindled is about to renew its advertising contracts, and marketing wants to move budget towards whatever is bringing in buyers rather than whatever is bringing in signups. The two are not the same thing, and the difference between them is the entire argument.
Working it out means crossing two tables. The channel that brought somebody in is recorded once, on the user record. Whether they ever bought is in the event log, one row per action. And a buyer who came back three times is still one buyer, so rows are the wrong thing to count.
users — one row per signed-up person. source is the channel that brought them in.
| id | name | source | signup_date |
|---|---|---|---|
| 1 | Aiden Cole | organic | 2023-05-01 |
| 2 | Bianca Reyes | paid_search | 2023-05-02 |
| 3 | Carlos Mora | organic | 2023-05-03 |
| 4 | Delia Frank | referral | 2023-05-04 |
| 5 | Ewan Blake | paid_search | 2023-05-05 |
| 6 | Fiona Grey | organic | 2023-05-06 |
| 7 | Gus Herrera | referral | 2023-05-07 |
| 8 | Hana Ito | paid_search | 2023-05-08 |
events — one row per action a user took. event_type is the kind of action.
| id | user_id | event_type | event_date |
|---|---|---|---|
| 1 | 1 | signup | 2023-05-01 |
| 2 | 1 | view_product | 2023-05-01 |
| 3 | 1 | add_to_cart | 2023-05-02 |
| 4 | 1 | purchase | 2023-05-03 |
| 5 | 2 | signup | 2023-05-02 |
| 6 | 2 | view_product | 2023-05-02 |
| 7 | 3 | signup | 2023-05-03 |
| 8 | 3 | view_product | 2023-05-03 |
| 9 | 3 | add_to_cart | 2023-05-04 |
| 10 | 4 | signup | 2023-05-04 |
| 11 | 4 | view_product | 2023-05-05 |
| 12 | 4 | add_to_cart | 2023-05-05 |
| 13 | 4 | purchase | 2023-05-06 |
| 14 | 5 | signup | 2023-05-05 |
| 15 | 6 | signup | 2023-05-06 |
| 16 | 6 | view_product | 2023-05-06 |
| 17 | 7 | signup | 2023-05-07 |
| 18 | 7 | view_product | 2023-05-07 |
| 19 | 7 | add_to_cart | 2023-05-08 |
| 20 | 7 | purchase | 2023-05-09 |
| 21 | 8 | signup | 2023-05-08 |
Both tables already exist in the database — there is nothing to create or load.
Task: Write a query returning two columns, source and num_purchasers, with one row per channel, counting how many separate people from that channel have at least one purchase event. Somebody who bought several times counts once. A channel that brought in signups but no buyers produces no row at all rather than a row reading zero. Rows come back with the strongest channel first, ties settled on source alphabetically.
Example output — shape only, on invented channels; the two channels level on four buyers show how that tie is settled.
| source | num_purchasers |
|---|---|
| paid_search | 9 |
| organic | 4 |
| referral | 4 |
Sign in to solve this problem
Reading problems is free for everyone — solving them (Run, Submit, and tracking what you've solved) needs an account.
Sign in