Eftersom beställningarna är kopplade till företagen via kunderna, jag tror inte att du behöver utföra två separata underfrågor och gå med dem; snarare tror jag att du bara kan skriva:
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
;
Redigerad för att lägga till: Som sagt, jag måste säga att schemat inte riktigt är vettigt för mig. Du har en många-till-många-relation mellan kunder och företag — så till exempel John Smith
är kund hos Acme Widget Company
och av Intrepid Inc.
— men då är beställningar bara kundens egendom, inte av företaget. Detta betyder att om en beställning tillhör John Smith
, då tillhör det nödvändigtvis båda till Acme Widget Company
och till Intrepid Inc.
. Jag tror inte att det kan vara rätt. Istället för att ha ett customer_id
fält, tror jag orders
måste ha ett companies_customers_id
fältet.