2017-11-09 2 views
0

ich so eine Tabelle mit SQL-Abfrage angezeigt werden soll:Zählen Sie jeden Tag mit SQL-Abfrage

enter image description here

ich meine Abfrage ausgeführt haben:

select 
    tb_r_orderdata.finishtime as date , 
    count(*)sum all, 
    sum(when status = 'SUCCESS' and issync = '1' then 1 else 0 end) sumpaid, 
    sum(when status = 'SUCCESS' and issync in ('3', '4') then 1 else 0 end) sumfail, 
    sum(when status = 'CLOSED' then 1 else 0 end) sumclose, 
    sum(when status = 'Null' then 1 else 0 end) sumunflag 
from 
    tb_r_orderdata; 

Aber wenn ich es ausführen, die Ergebnis ist anders als das, was ich erwartet habe. Das Ergebnis ist wie folgt aus:

enter image description here

Danke für jede Hilfe

Antwort

1

Sie sind die GROUP BY fehlt und die CASE:

select tb_r_orderdata.finishtime as date , 
     COUNT(*) as sumall, 
     SUM(CASE WHEN status='SUCCESS' AND issync='1' then 1 ELSE 0 END) as sumpaid, 
     SUM(CASE WHEN status='SUCCESS' AND issync in ('3','4') then 1 ELSE 0 END) as sumfail, 
     SUM(CASE WHEN status='CLOSED' then 1 ELSE 0 END) as sumclose, 
     SUM(CASE WHEN status is null then 1 ELSE 0 END) as sumunflag 
from tb_r_orderdata 
group by tb_r_orderdata.finishtime ; 

MySQL booleans als ganze Zahlen in einem numerischen Kontext behandelt, mit "1" für wahr und "0" für falsch.

select o.finishtime as date , 
     COUNT(*) as sumall, 
     SUM(status = 'SUCCESS' AND issync = '1') as sumpaid, 
     SUM(status = 'SUCCESS' AND issync in ('3', '4')) as sumfail, 
     SUM(status = 'CLOSED') as sumclose, 
     SUM(status is null) as sumunflag 
from tb_r_orderdata o 
where tb_r_orderdata.finishtime is not NULL 
group by o.finishtime ; 

Damit entfällt auch NULL Endzeiten: Sie können Ihre Abfrage vereinfachen.

+0

ya, ich meine Null ist NULL. Nein ich sehe, ich habe vergessen, die Gruppe zu verwenden, wie Sie gesagt haben, danke für Ihre Antwort. Ich möchte diese Antwort akzeptieren, aber ich muss in 7 Minuten warten. ich danke dir sehr. aber es gibt ein Problem oben in der Tabelle gibt es eine solche Aufzeichnung. –

+0

überprüfen Sie die Antwort oben, weil ich in Kommentar kann ich Bild hochladen, so dass ich in der Antwort hinzufügen. Danke dir so sehr –

+0

Der 'NULL' Datensatz ist da' finishtime' 'NULL'. Sie können dies herausfiltern, indem Sie der Abfrage 'where endtime is not null 'hinzufügen. –

0

Explanation in comment for Gordon Linoff

Erklärung in Kommentar für Gordon Linoff

ich habe Ihre Antwort versuchen, aber es ist Rekord NULL in der Spitze der Tabelle, ich weiß nicht, warum, können Sie es

mit wenig erklären Bitwechsel von Gordon Linoff Antwort

select tb_r_orderdata.finishtime as date , 
     SUM(CASE WHEN status='SUCCESS' AND issync='1' then 1 ELSE 0 END) as sumpaid, 
     SUM(CASE WHEN status='SUCCESS' AND issync in ('3','4') then 1 ELSE 0 END) as sumfail, 
     SUM(CASE WHEN status='CLOSED' then 1 ELSE 0 END) as sumclose, 
     SUM(CASE WHEN status='NULL' then 1 ELSE 0 END) as sumunflag 
from tb_r_orderdata 
group by tb_r_orderdata.finishtime