Jeśli jestem zrozumienia pytanie, wszystko co musisz zrobić, to dodać SUM()
:
SELECT a.*,
Count(b.id) as counttotal,
sum(b.costs) TotalCost
FROM dealers a
LEFT JOIN inquiries b on a.id=b.dealer_id
GROUP BY a.id
ORDER BY name ASC
Moja sugestia byłoby użyć podzapytania uzyskać count
i sum
:
SELECT a.*,
b.countTotal,
b.TotalCosts
FROM dealers a
LEFT JOIN
(
select COUNT(ID) countTotal,
SUM(costs) TotalCosts,
dealer_id
from inquiries
group by dealer_id
) b
on a.id=b.dealer_id
ORDER BY name ASC
Zgaduję z pierwotnego zapytania, że używasz MySQL. Sugerowałbym użycie podzapytania, ponieważ MySQL używa rozszerzenia do GROUP BY, które pozwala na nieagregowanie elementów na liście wyboru i nie jest zawarte w klauzuli GROUP BY
. Może to jednak prowadzić do nieoczekiwanych rezultatów, ponieważ MySQL może wybrać zwrócone wartości. (Patrz MySQL Extensions to GROUP BY)
Z MySQL Docs:
MySQL rozszerza stosowanie GROUP BY tak, że lista wyboru może odnosić się do nonaggregated kolumn nie wymienionych w klauzuli GROUP BY. ... Możesz użyć tej funkcji, aby uzyskać lepszą wydajność, unikając niepotrzebnego sortowania i grupowania kolumn. Jest to jednak przydatne przede wszystkim wtedy, gdy wszystkie wartości w każdej niezagregowanej kolumnie nienazwanej w GROUP BY są takie same dla każdej grupy. Serwer może dowolnie wybrać dowolną wartość z każdej grupy, więc jeśli nie są one takie same, wybrane wartości są nieokreślone. Ponadto nie można wpłynąć na wybór wartości z każdej grupy poprzez dodanie klauzuli ORDER BY. Sortowanie zestawu wyników następuje po wybraniu wartości, a ORDER BY nie wpływa na wartości wybierane przez serwer.
Smak RDBMS proszę? –
Niestety - baza danych to MySQL –