Como os pedidos estão vinculados às empresas via os clientes, não acho que você precise realizar duas subconsultas separadas e juntá-las; em vez disso, acho que você pode simplesmente escrever:
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
;
Editado para adicionar: Dito isso, devo dizer que o esquema realmente não faz sentido para mim. Você tem um relacionamento de muitos para muitos entre clientes e empresas — por exemplo,
John Smith
é cliente da Acme Widget Company
e da Intrepid Inc.
— mas os pedidos são apenas uma propriedade do cliente, não da empresa. Isso significa que se um pedido pertencer a John Smith
, então ele necessariamente pertence a ambos para Acme Widget Company
e para Intrepid Inc.
. Eu não acho que isso pode estar certo. Em vez de ter um customer_id
campo, acho que orders
precisa ter um companies_customers_id
campo.