SQL Repeat Customer Analysis

Count entities with activity on more than one distinct occasion.

What & Why

Repeat-customer analysis separates entities with one qualifying transaction from those with two or more. Repeat behavior is a core loyalty signal and should be measured at customer grain.

See How It Works

BUSINESS QUESTION

Find SaaS accounts with at least two distinct paid invoices.

idnameplanmrrcreated_atchurned_atcountryemployee_countindustry
1Acme Labsgrowth240.002024-01-08 10:00:00+00NULLUS45software
2Northstar Costarter90.002024-02-12 09:30:00+002024-05-18 12:00:00+00CA18services
3Atlas Worksscale480.002024-03-04 15:10:00+00NULLGB120manufacturing
4Bright Pathgrowth180.002024-04-19 11:45:00+00NULLUS62education
idaccount_idamountstatusdue_datepaid_at
101240.00paid2024-02-012024-01-29 13:00:00+00
111260.00paid2024-03-012024-02-28 16:30:00+00
12290.00overdue2024-03-15NULL
133480.00open2024-04-01NULL
EXAMPLE QUERY
SELECT
  a.id AS account_id,
  a.name,
  COUNT(DISTINCT i.id) AS paid_purchases,
  SUM(i.amount) AS paid_value
FROM saas.accounts a
JOIN saas.invoices i ON i.account_id = a.id
WHERE i.status = 'paid'
GROUP BY a.id, a.name
HAVING COUNT(DISTINCT i.id) >= 2
ORDER BY paid_purchases DESC, account_id;
RESULT — account with at least two paid purchases
account_idnamepaid_purchasespaid_value
1Acme Labs2500.00

Acme Labs has two distinct paid invoices totaling 500.00; every other account is removed by HAVING.

This lesson's practice is part of Pro.

Advanced business practice

Sign up free to try it on a real business scenario