2009-04-12 5 views
3

Ich versuche, eine Abfrage zu erstellen, Umsatz zu melden. Es werden 2 Tabellen benötigt: Klicks und Angebote. Der Umsatz errechnet sich aus der Anzahl der Conversions * Provision für das Angebot. Conversions werden in der Clicks-Tabelle in einem Feld namens "conversionDate" gespeichert, und die Provision für jedes Angebot wird in der Tabelle "Angebote" gespeichert.SQL-Abfrage mit If Statement

Es muss eine Bedingung in der Abfrage werden alle Klicks zu ignorieren, die nicht konvertiert werden konnten (was bedeutet, conversionDate ist NULL), wenn die Einnahmen für das Angebot addieren.

Was ich habe ein bisschen zwicken muss, wie es nicht den richtigen Wert für Einnahmen geführt:

SELECT o.name Angebot, count (c.id) Klicks, wenn (nicht (c isnull. conversionDate), revenue = Umsatz + o.commission, revenue) Umsatz FROM Klicks c, Angebote o wo c.offerID = o.ID GROUP BY o.ID;

Ich habe 3 dummy Datensätze in Klicks jetzt, von denen 2 Umrechnungen sind. Wenn die Provision auf 1 gesetzt wird, sollte der Umsatz 2 betragen. Das Ergebnis, das ich bekomme, ist 1. Bin ich auf dem richtigen Weg oder sollte die Umsatzberechnung eine Art Unterabfrage sein oder was?

Antwort

6

ich die Abfrage auf diese Weise schreiben würde:

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; 

Hier ist eine andere Lösung, aber Angebote, die keine umgewandelten Klicks haben, werden nicht in th angezeigt e Abfrageergebnis:

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

Die erste Abfrage ist was ich brauchte. Danke vielmals! –

0

bewegen die Nullprüfung der WHERE-Klausel

+0

Das würde für dieses bestimmte Beispiel funktionieren, aber die Abfrage, die ich tatsächlich verwende, hat viel mehr Informationen darin; Ich kann die Klicks nicht ausschließen, die nicht konvertiert wurden, da dies die anderen Daten durcheinander bringen würde. –

+0

@ [wbgriffin]: teilen Sie es in 2 Unter/Abfragen, oder posten Sie die echte Sache; kann Fragen mit unvollständigen/irreführenden Beispielen nicht genau beantworten ;-) –

0

Diese Abfrage:

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

dasselbe Ergebnis wie meine ursprüngliche Abfrage .. –

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;