Совершенно "в лоб":
Группируем заказы по покупателю. Точка.
SELECT
`order`.customer_id,
orders_count=COUNT(*)
FROM `order`
GROUP BY `order`.customer_id
На выходе этой сущности - получаем уникальный по кастомеру список "покупатель-число покупок"
Ну а дальше - по вкусу:
- join'им к этой сущности таблицу покупателей и получаем нечто,
- join'им к покупателям эту сущность и в зависимости от условия left/inner - получаем всех покупателей со статистикой или же только реальных покупателей с этой же статистикой
- используем эту сущность в cte (тот же join с другого ракурса)