我正在尝试提出一个报告收入的查询。它需要2个表:点击和优惠。收入按要约的转换次数*佣金计算。转换存储在点击表中名为“conversionDate”的字段中,每个商品的佣金都存储在商品表中。
在为要约添加收入时,查询中需要有条件忽略任何未转换的点击(意味着conversionDate为NULL)。
我所需要的是一些调整,因为它没有给出正确的收入价值:
SELECT o.name offer,count(c.id)点击次数,if(不是isnull(c.conversionDate),收入=收入+ o.commission,收入)收入FROM点击c,提供o其中c.offerID = o .ID GROUP BY o.ID;
我现在有3个虚拟记录,其中2个是转换。佣金设置为1,收入应为2.我得到的结果是1.我是在正确的轨道上还是收入计算是某种子查询还是什么?
答案 0 :(得分: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;
答案 1 :(得分:0)
将空检查移至WHERE子句
答案 2 :(得分: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;
答案 3 :(得分: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;