Estou tentando selecionar 10 clientes com número mínimo de registros(compras). Minhas tabelas são: produtos, clientes, compras(id, customer_id, product_id). O que eu acho é selecionar clientes, agrupá-los e então escrever uma consulta aninhada e obter a contagem mínima, assim:
SELECT last_name, name, COUNT(pur.id) FROM customers AS c
INNER JOIN purchases AS pur ON c.id=pur.customer_id
INNER JOIN products AS pr ON pr.id=pur.product_id
GROUP BY last_name, name
HAVING count(pur.id) = (SELECT min(pur.id) FROM
(SELECT count(pur.id) FROM customers AS c
INNER JOIN purchases AS pur ON c.id=pur.customer_id
INNER JOIN products AS pr ON pr.id=pur.product_id
GROUP BY last_name, name))
Mas não tenho certeza de como fazer isso?
Você está bem perto, na verdade. Você deve primeiro agrupar por pessoa e contar as compras. Em seguida, classifique pela contagem e selecione as 10 primeiras pessoas.
Falta um detalhe na pergunta. Você disse que deseja um número mínimo de compras. No esquema do banco de dados, uma compra contém muitos produtos. A consulta de amostra conta a contagem total dos produtos em todas as compras. Na minha solução é a mesma coisa. Se você estiver interessado apenas nas compras basta soltar o join na tabela de produtos.