如果我理解您的问题,您需要做的就是添加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
我的建议是使用子查询来获取count
和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
我从您的原始查询中猜测您正在使用 MySQL。我建议使用子查询,因为 MySQL 使用 GROUP BY 的扩展,它允许选择列表中的项目不聚合并且不包含在GROUP BY
子句中。然而,这可能会导致意外的结果,因为 MySQL 可以选择返回的值。(参见MySQL 对 GROUP BY 的扩展)
来自 MySQL 文档:
MySQL 扩展了 GROUP BY 的使用,以便选择列表可以引用未在 GROUP BY 子句中命名的非聚合列。...您可以使用此功能通过避免不必要的列排序和分组来获得更好的性能。但是,这主要在每个未在 GROUP BY 中命名的非聚合列中的所有值对于每个组都相同时很有用。服务器可以从每个组中自由选择任何值,因此除非它们相同,否则选择的值是不确定的。此外,从每个组中选择值不会受到添加 ORDER BY 子句的影响。在选择了值之后对结果集进行排序,并且 ORDER BY 不会影响服务器选择的值。