当我添加一个左连接来获取外部表的计数时,它将我的另一个左连接表的和值乘以该计数,并且我不能在这里使用不同的和,因为两个值可以相同:
SELECT c.id as company_id, SUM(ct.amount) as total_billed, count(l.id) as load_count
FROM tbl_companies c
LEFT JOIN tbl_company_transactions ct ON c.id = ct.company_id
LEFT JOIN tbl_loads l ON c.id = l.company_id
GROUP BY c.id;
3条答案
按热度按时间zvms9eto1#
您需要预先聚合数据:
正如你所观察到的
JOIN
乘以行数并影响聚合。yzuktlbb2#
gordon的答案更具可伸缩性,但对于这个特定的查询,您只需要一个子查询,这也可能会提高性能,因为预聚合数据上的连接可能无法使用索引。
重要的是要掌握,如果你需要一个聚合函数的结果,比如
SUM()
或者COUNT()
,执行多行的多个联接时需要小心。kx1ctssn3#
您可以隔离聚合统计信息,然后连接结果。