左连接,左表中的每一行都有1个结果 - 没有GROUP BY

时间:2016-01-28 18:23:44

标签: mysql left-join

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

流量:ID,展示次数,国家/地区

事件:trafficID,出售

对于每个流量行,事件中可能有0行或更多行。 从流量表+左侧选择所有行时,请加入事件表以获取每个流量行的总销售额 - 结果集中的某些行将重复,因为流量行少于1个事件。

简单的解决方案是GROUP BY traffic.id。 现在假设我想按国家/地区进行分组,并选择此特定国家/地区的展示次数和销售额,如果我按GROUP.ID进行分组。我不会得到我想要的结果集 - 如果我赢了&#39 ; t group by traffic.id我将获得重复的流量行,从而得到错误的SUM结果。

任何优雅的解决方法?我正在使用php pdo mysql,innodb引擎以防它相关。

1 个答案:

答案 0 :(得分:1)

在加入之前对Events表进行分组?

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