Dado que los pedidos están vinculados a las empresas a través de los clientes, no creo que necesite realizar dos subconsultas separadas y unirlas; más bien, creo que puedes escribir:
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 agregar: Dicho esto, debo decir que el esquema realmente no tiene sentido para mí. Tiene una relación de muchos a muchos entre clientes y empresas, por ejemplo, John Smith
es cliente de Acme Widget Company
y de Intrepid Inc.
— pero entonces los pedidos son solo una propiedad del cliente, no de la compañia. Esto significa que si un pedido pertenece a John Smith
, entonces necesariamente pertenece a ambos a Acme Widget Company
y a Intrepid Inc.
. No creo que eso pueda estar bien. En lugar de tener un customer_id
campo, creo que orders
necesita tener un companies_customers_id
campo.