2016-11-03 2 views
1

Ich habe ein Problem mit einer MySQL-Abfrage, die Daten in meiner Tabelle nach Wochentag gruppiert.Mysql-Gruppe nach Wochentag, füllen Sie fehlende Wochentage

Ich brauche es um wochentags zu füllen, dass ein in den Daten fehlt, zum Beispiel Sonntag (Wochentag 7) im SQL-Beispiel unten.

SQL Fiddle

MySQL 5.6 Schema Einrichtung:

create table test (
`id` INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
`date` DATETIME 
); 

INSERT INTO test (`date`) VALUES 
('2016-05-16 00:00:00'), 
('2016-05-17 00:00:00'), 
('2016-05-18 00:00:00'), 
('2016-05-20 00:00:00'), 
('2016-05-21 00:00:00'), 
('2016-05-22 00:00:00'), 
('2016-05-16 00:00:00'), 
('2016-05-17 00:00:00'), 
('2016-05-18 00:00:00'), 
('2016-05-20 00:00:00'); 

Abfrage 1:

SELECT WEEKDAY(date) AS weekday, 
    COUNT(id) AS posts 
FROM test 
GROUP BY WEEKDAY(date) 

Results:

| weekday | posts | 
|---------|-------| 
|  0 |  2 | 
|  1 |  2 | 
|  2 |  2 | 
|  4 |  2 | 
|  5 |  1 | 
|  6 |  1 | 

Ich erwarte, dass es diese Linie auch zurückgibt.

Meine komplette Abfrage ich ziemlich komplex, so hoffe ich, dass Sie eine schnelle Lösung dafür finden.

+0

Sie für diesen Tag keine Daten haben. Daher gibt es keine Zeile zurück, wenn keine Daten zurückgegeben werden. –

+1

Ich glaube, du verpasst etwas ... Wenn du "Wochentag" ** 0 ** bekommst, kannst du nicht "Wochentag" bekommen ** 7 * * (zumindest nicht auf diesem Planeten). – FDavidov

+1

Ich denke, Sie erwarten 'Weekday = 3 Posts = 0' in den Ergebnissen. –

Antwort

4

Der normale Ansatz ist ein left join:

select wd.wd, count(t.id) 
from (select 1 as wd union all select 2 union all select 3 union all select 4 uion all 
     select 5 union all select 6 union all select 7 
    ) wd left join 
    test t 
    on wd.wd = weekday(t.date) 
group by wd.wd 
order by wd.wd; 
Verwandte Themen