Étant donné que les commandes sont liées aux entreprises via les clients, je ne pense pas que vous ayez besoin d'effectuer deux sous-requêtes distinctes et de les joindre ; plutôt, je pense que vous pouvez simplement écrire :
SELECT companies.company AS "Company",
IFNULL(COUNT(DISTINCT companies_customers.customer_id), 0) AS "Total Customers",
IFNULL(SUM(orders.amount), 0) AS "All Orders Total"
FROM companies
LEFT
JOIN companies_customers
ON companies_customers.company_id = companies.id
LEFT
JOIN orders
ON orders.customer_id = companies_customers.customer_id
GROUP
BY companies.id
;
Modifié pour ajouter : Cela dit, je dois dire que le schéma n'a pas vraiment de sens pour moi. Vous avez une relation plusieurs-à-plusieurs entre les clients et les entreprises ; par exemple, John Smith
est un client de Acme Widget Company
et de Intrepid Inc.
— mais alors les commandes ne sont qu'une propriété du client, pas de la compagnie. Cela signifie que si une commande appartient à John Smith
, alors il appartient nécessairement aux deux à Acme Widget Company
et à Intrepid Inc.
. Je ne pense pas que cela puisse être juste. Au lieu d'avoir un customer_id
champ, je pense que orders
doit avoir un companies_customers_id
champ.