我有2个表:(我删除了不相关的字段)
流量:ID,展示次数,国家/地区
事件:trafficID,出售
对于每个流量行,事件中可能有0行或更多行。 从流量表+左侧选择所有行时,请加入事件表以获取每个流量行的总销售额 - 结果集中的某些行将重复,因为流量行少于1个事件。
简单的解决方案是GROUP BY traffic.id。 现在假设我想按国家/地区进行分组,并选择此特定国家/地区的展示次数和销售额,如果我按GROUP.ID进行分组。我不会得到我想要的结果集 - 如果我赢了&#39 ; t group by traffic.id我将获得重复的流量行,从而得到错误的SUM结果。
任何优雅的解决方法?我正在使用php pdo mysql,innodb引擎以防它相关。
答案 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