左连接,左侧每行有 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
我有 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