All problems

Which Channel Converts Best?

mediumSQLJoinsGroupBy

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

Discussion

Sign in to join the discussion — reading is open to everyone.

Loading comments…