2009-06-30 10 views
1

Ich habe zwei verschiedene Tabellen, führen und klicken. Ich möchte MySQL abfragen, um die Summe der Provisionen zu erhalten, die von Klicks und Leads nach Datum generiert werden.Gruppensumme aus zwei Tabellen nach Datum in MySQL

Lead:

id|date  |commission 
1|2009-06-01|400 
2|2009-06-01|300 
3|2009-06-03|350 

Click:

id|date  |commission 
1|2009-06-01|1 
2|2009-06-03|2 
3|2009-06-03|1 

Ich möchte eine Abfrage erstellen, die mir gibt (und wenn möglich auch Datum wird in dem kein Blei oder klicken gewesen erzeugt):

date  |commission click|commission lead|total commission 
2009-06-01|    1|   700|    701 
2009-06-02|    0|    0|    0 
2009-06-02|    3|   350|    353 

(Das Datum ist eigentlich Datetime in der realen Datenbank.)

Ich glaube, ich zu kombinieren haben:

SELECT count(*) as number_clicks, sum(click.commission) as sum_clicks, 
date(click.time) as click_date from click group by click_date order by click_date 

mit:

SELECT count(*)as number_leads, sum(lead.commission) as sum_leads, 
date(lead.time) as lead_date from lead group by lead_date order by lead_date 

Aber ich kann sie nicht zusammen zu arbeiten.

+0

Warum bearbeite ich alte Fragen? Entschuldigung. – Strawberry

Antwort

2

Dies wird keine Daten mit Nullen erhalten, dafür benötigen Sie entweder eine Datums-Tabelle oder eine gespeicherte Prozedur, um Daten zu durchlaufen. Eine Möglichkeit, dies zu tun, ist ein Subselect von einer Union-Abfrage (ungetestet):

SELECT commission_date, SUM(click_commission), SUM(lead_commission), SUM(total_commission) 
FROM (SELECT DATE(click.time) AS commission_date, click.commission AS click_commission, 
      0 AS lead_commission, click.commission AS total_commission 
     FROM click 
     UNION ALL 
     SELECT DATE(lead.time) AS commission_date, 0 AS click_commission, 
      lead.commission AS lead_commission, lead.commission AS total_commission 
     FROM lead) AS foo 
GROUP BY commission_date 
ORDER BY commission_date 
+0

Got "Jede abgeleitete Tabelle muss ihren eigenen Alias ​​haben", aber nach dem Hinzufügen von "AS foo" nach dem letzten SELECT und vor GROUP funktionierte es genauso wie gefragt. Vielen Dank! – boingboing

+0

Bearbeitete die Abfrage, um den Aliasnamen aufzunehmen. Froh, dass es funktioniert hat :) –