私があなたの質問を理解していれば、あなたがする必要があるのは次を追加することだけです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 は返される値を選択できるため、予期しない結果が生じる可能性があります。( GROUP BY に対する MySQL 拡張機能を参照してください)
MySQL ドキュメントから:
MySQL は GROUP BY の使用を拡張して、選択リストが GROUP BY 句で指定されていない非集計列を参照できるようにします。... この機能を使用して、不要な列の並べ替えやグループ化を回避することで、パフォーマンスを向上させることができます。ただし、これは主に、GROUP BY で指定されていない各非集計列のすべての値が各グループで同じである場合に役立ちます。サーバーは各グループから任意の値を自由に選択できるため、それらが同じでない限り、選択された値は不確定です。さらに、各グループからの値の選択は、ORDER BY 句を追加しても影響を受けません。結果セットのソートは値が選択された後に行われ、ORDER BY はサーバーが選択する値には影響しません。