我在使用 MySQL 时遇到了一个非常棘手的问题。
我有两个具有一对多关系的表(在相关的列下方)
表 A(事件):
id | channel_type | date
表 B(预算):
id | campaign_id | budget
我需要单个查询来获取以下结果:
- 按 channel 类型统计的事件数
- 与找到的广告系列相关的所有预算总和。
我需要按事件表中的列过滤结果(例如 WHERE campaigns.date > '2014-05-01')
我试过以下方法:
SELECT channel_type, COUNT(*) cnt,
(SELECT SUM(budget) FROM budgets WHERE budgets.campaign_id = campaigns.id))
as budget
FROM campaigns
WHERE campaigns.date >= 'some-value'
AND [more conditions]
GROUP BY campaigns.channel_type
但这当然会惨遭失败,因为 GROUP 我只获得了 channel_type 的第一个 campaigns.id 结果。
任何提示(和解决方案)将不胜感激!
TIA
最佳答案
- 使用 GROUP BY campain_id 从预算表中获取总预算。这将是子查询。命名它。例如,A。
- 现在使用 GROUP BY channel_type 和 WHERE date>='some-value' 从事件中获取 ID 总数。
- 在最终查询中使用步骤 2 和 1(子查询将充当表),您将获得结果。 您可以发布架构,然后我可以检查。
关于MySQL group 和 sum 连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25532473/