2009-04-12 530 views
3

我想要拿出一個查詢來報告收入。它將需要2個表格:點擊和優惠。收入是根據報價的轉化次數*佣金計算的。轉化數據存儲在名爲「conversionDate」的字段中的點擊表格中,每個要約的佣金都存儲在要約表中。SQL查詢與if語句

查詢中需要有一個條件才能忽略在爲報價添加收入時未轉換的任何點擊(意思是conversionDate爲NULL)。

我有什麼需要一點調整,因爲它是不是給正確的價值收入:

SELECT o.name報價,計數(c.id)點擊,如果(不ISNULL(C。 conversionDate),收入=收入+ o.commission,收入)收入點擊c,offer o其中c.offerID = o.ID GROUP BY o.ID;

我現在有3個虛擬記錄點擊,其中2個是轉換。將佣金設置爲1,收入應該是2.我得到的結果是1.我是在正確的軌道上還是應該計算收入是某種子查詢還是什麼?

回答

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; 

這裏的另一種解決方案,但沒有任何轉化點擊的優惠不會顯示在第e查詢結果:

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; 
0

舉動空校驗WHERE子句

+0

這將適用於這個特定的例子,但我實際使用的查詢有更多的信息;我無法排除未轉換的點擊,因爲這會弄亂其他數據。 – 2009-04-12 22:04:53

+0

@ [wbgriffin]:將它分成2個子/查詢,或張貼真實的東西;不能使用不完整/誤導性示例準確回答問題;-) – 2009-04-12 22:12:30

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; 
+0

與我原始查詢的結果相同。 – 2009-04-12 22:07:07

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;