Ponieważ zamówienia są powiązane z firmami przez klientów, myślę, że nie musisz wykonywać dwóch oddzielnych podzapytań i dołączać do nich; raczej myślę, że możesz po prostu napisać:
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
;
Zmieniono, aby dodać: To powiedziawszy, muszę powiedzieć, że schemat nie ma dla mnie sensu. Między klientami a firmami istnieje relacja wiele-do-wielu — na przykład John Smith
jest klientem Acme Widget Company
i firmy Intrepid Inc.
— ale wtedy zamówienia są tylko własnością klienta, nie firmy. Oznacza to, że jeśli zamówienie należy do John Smith
, to koniecznie należy do obydwóch do Acme Widget Company
i do Intrepid Inc.
. Nie sądzę, żeby to było właściwe. Zamiast posiadania customer_id
pole, myślę, że orders
musi mieć companies_customers_id
pole.