Ich muss eine Abfrage in MySQL erstellen, die 12 Zeilen (eine Zeile für jeden Monat) zurückgibt, die den Namen des Monats und die Anzahl der Datensätze für den angegebenen Monat wählt. Ich habe zwei Tabellen, ein monates_tbl und events_tbl. Jeder Datensatz in der Tabelle events_tbl verfügt über eine Datetime-Spalte und eine Company_id-Spalte.mysql wählen Sie die Anzahl der Datensätze für jeden Monat
Ich bin derzeit so etwas wie tun (merke ich, haben nicht die WHERE-Klausel company_id noch):
SELECT months_tbl.month, COUNT(events_tbl.event_id) cnt
FROM months_tbl
LEFT JOIN events_tbl ON months_tbl.month_id = MONTH(events_tbl.appt_date_time)
GROUP BY months_tbl.month
ORDER BY months_tbl.month_id ASC;
Das gibt etwas wie das, was ich erwarte (12 Zeilen ausgewählt, mit einer Zählung von Ereignisse für den Monat oder Null, wenn es keine gab):
**month** **cnt**
January 0
February 0
March 0
April 0
May 0
June 0
July 0
August 88
September 99
October 120
November 0
December 9
jedoch gibt es alle Datensätze unabhängig von der Firma zurück. Ich muss sicherstellen, dass die Abfrage von so gefiltert wird, fügte ich die where-Klausel:
SELECT months_tbl.month, COUNT(events_tbl.appt_id) cnt
FROM months_tbl
LEFT JOIN events_tbl ON months_tbl.month_id = MONTH(events_tbl.appt_date_time)
WHERE events_tbl.company_id = 1
GROUP BY months_tbl.month
ORDER BY months_tbl.month_id ASC;
Wenn ich hinzufügen, die where-Klausel meine Ergebnisse werden:
**month** **cnt**
August 88
September 99
October 120
December 9
Irgendwelche Ideen, warum ich verliere alle die anderen Monate Datensätze, wenn ich die WHERE-Klausel hinzufügen, obwohl ich eine linke Verknüpfung verwende?
ist Hat meine Lösung Ihnen geholfen? – arnoudhgz