左连接,左侧每行有 1 个结果 table - 没有 GROUP BY

Left join with 1 result for each row in the left table - without GROUP BY

我有 2 tables:(我删除了不相关的字段)

流量:id、展示次数、国家/地区

事件:trafficID,sells

对于每个流量行,事件中可能有 0 行或更多行。 当 selecting 来自流量 table 的所有行时 + 左连接事件 table 以获得每个流量行的销售总和 - 结果集中的一些行将是重复的,因为有事件多于 1 个的流量行很少。

简单的解决方案是 GROUP BY traffic.id。 现在假设我想按国家/地区分组,select 这个特定国家/地区的印象和销售总和,如果我按 traffic.id 分组,我将得不到我想要的结果集 - 如果我不会按 traffic.id 分组,我会得到重复的流量行,从而得到错误的 SUM 结果。

有什么优雅的方法可以解决这个问题吗?我正在使用 php pdo mysql,innodb 引擎以防它是相关的。

在加入之前将 Events table 分组?

SELECT   t.country, SUM(t.impressions), SUM(e.totalSells)
FROM     Traffic t LEFT JOIN (
           SELECT   trafficID, SUM(sells) AS totalSells
           FROM     Events
           GROUP BY trafficID
         ) e ON e.trafficID = t.id
GROUP BY t.country