All problems

Repeat Customers

mediumSQLJoinsGroupByHAVING

Retention marketing at Whetcode Supply only writes to people who have already come back at least once — a customer who bought twice is worth a nudge, a customer who bought once is a different campaign entirely. The team wants the audience list with each person's order tally beside their name, so they can weigh up the top of the list by hand.

The tally is the awkward part. It is not stored anywhere: it comes into existence only once a customer's orders have been bundled together. And the test more than one has to be applied to that bundled figure, not to a single order row — no individual order knows, or could know, how many others the same person placed.

customers — one row per registered customer. city is the city given at signup and signup_date is the day they registered, written year-month-day.

id name city signup_date
1 Priya Nair Austin 2022-01-15
2 Tom Becker Berlin 2022-03-02
3 Sofia Rossi Milan 2022-05-19
4 Liam OConnor Dublin 2023-01-08
5 Wei Zhang Austin 2023-04-27

orders — one row per order. customer_id is the id of the customer who placed it, product_id the id of the item bought, quantity how many units of that item, and order_date the day it was placed. An order row covers one item only.

id customer_id product_id quantity order_date
1 1 1 2 2023-02-01
2 1 4 1 2023-02-01
3 2 2 1 2023-02-10
4 3 3 3 2023-03-05
5 4 5 5 2023-03-11
6 1 3 1 2023-04-02
7 5 1 4 2023-05-20
8 2 5 2 2023-05-22
9 3 4 1 2023-06-01
10 5 2 1 2023-06-15

The tables already exist in the database — there is nothing to create or load.

Task: Write a query returning two columns, name (the customer's name) and orders (how many orders that customer has placed), one row per customer with more than one order, most orders first, and alphabetically by name when two customers have the same tally.

Example output — shape only, on invented customers. The middle two are level, so they fall alphabetically:

name orders
Rosa Delgado 9
Bram Visser 6
Kenji Aoki 6
Yara Osei 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…