É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.