0

我想运行一个为广告系列生成收入报告的查询。有 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'

这需要很多时间。无论如何要优化它还是在单个查询中完成?

4

3 回答 3

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 组

于 2012-04-16T17:32:12.200 回答
0

采用

where campaing_code in ('XX','YY','ZZ','AA','BB')

并在 campaing_code 上有一个索引

于 2012-04-16T16:36:17.840 回答
0

付款(id,member_id,amount)我想创建一个按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 子句。您在评论中提到表确实有索引,但我会确保成员表在campaign_code 上有索引,并且支付在member_id 上有索引。

此查询将提供已贡献的不同成员的计数、贡献的总数(如果一个或多个成员多次贡献)以及所有贡献的总数。

于 2012-04-16T17:05:03.737 回答