3

我正在尝试提出一个查询来报告收入。它将需要 2 个表格:clicks 和 offer。收入的计算方法是转化次数 * 优惠的佣金。转化存储在点击表中名为“conversionDate”的字段中,每个报价的佣金存储在报价表中。

查询中需要有一个条件,以在为优惠加总收入时忽略任何未转化的点击(意味着conversionDate 为NULL)。

我需要进行一些调整,因为它没有给出正确的收入值:

SELECT o.name offer, count(c.id) clicks, if(not isnull(c.conversionDate),income=revenue+o.commission,income)income FROM clicks c, offer o where c.offerID=o.ID GROUP通过 o.ID;

我现在有 3 条虚拟点击记录,其中 2 条是转化。将佣金设置为 1,收入应该是 2。我得到的结果是 1。我是否走在正确的轨道上,或者收入计算应该是某种子查询还是什么?

4

4 回答 4

6

我会这样写查询:

SELECT o.name AS offer, COUNT(c.id) AS clicks, 
  SUM( IF(c.conversionDate IS NOT NULL, o.commission, NULL) ) AS revenue 
FROM offers o JOIN clicks c ON (c.offerID=o.ID)
GROUP BY o.ID;

这是另一种解决方案,但没有任何转化点击的商品不会显示在查询结果中:

SELECT o.name AS offer, COUNT(c.id) AS clicks, 
  SUM(o.commission) AS revenue 
FROM offers o JOIN clicks c 
  ON (c.offerID=o.ID AND c.conversionDate IS NOT NULL)
GROUP BY o.ID;
于 2009-04-12T23:38:31.327 回答
0

将空检查移至 WHERE 子句

于 2009-04-12T22:01:09.613 回答
0

试试这个查询:

SELECT o.name offer, COUNT(c.id) clicks, IF(c.conversionDate IS NULL, revenue + o.commission, revenue) revenue
FROM clicks c, offers o
WHERE c.offerID=o.ID
GROUP BY o.ID;
于 2009-04-12T22:03:31.073 回答
0
SELECT o.name offer, count(*) clicks, (COUNT(c.ID) * o.commission) revenue
FROM clicks c, offers o
WHERE c.ConversionDate is not null and c.offerID=o.ID
GROUP BY o.ID, o.name, o.commission;
于 2009-04-12T23:01:07.987 回答