我想运行一个生成广告系列收入报告的查询。有2个表 会员和付款。
members (id, campaign_code)
payments (id, member_id, amount)
我想创建一个按campaign_code
分组的表格,即格式为
campaign_code, member_count, total_revenue
我将所有广告系列放入一个数组并运行它,
SELECT sum( amount ) AS amt
FROM (members
INNER JOIN payments
ON payments.member_id = members.id
)
WHERE campaign_code = 'XX'
这需要很多时间。无论如何要优化它或在单个查询中执行它?
答案 0 :(得分:1)
正如您所说,您需要汇总所有广告系列代码,请尝试此
SELECT m.campaign_code , count(p.member_id) AS member_count,
SUM( amount ) AS total_revenue
FROM members m, payments p
WHERE p.member_id = m.id
GROUP BY campaign_code;
确保按函数
读取mysql组答案 1 :(得分:0)
使用
where campaing_code in ('XX','YY','ZZ','AA','BB')
并且有一个关于campaing_code的索引
答案 2 :(得分:0)
付款(id,member_id,金额) 我想创建一个按campaign_code分组的表格,即格式为
campaign_code,member_count,total_revenue 我将所有广告系列放入一个数组并运行它,
select
m.Campaign_Code,
count( distinct p.member_id) as Members,
count(*) as PaymentEntries,
sum( p.amount ) as TotalRevenue
from
members m
join Payments p
on m.id = p.member_id
where
m.campaign_code = 'XX'
如果您想要所有广告系列,只需删除WHERE子句即可。你在评论中提到表DO有索引,但我会确保成员表有campaign_code索引,而付款有member_id索引。
此查询将列出已贡献的不同成员,贡献总数(如果一个或多个成员多次贡献),以及所有贡献的总数。