schniefnase
Goto Top

(Anfänger): SQL Query zum Zählen von Zeilen getrennt nach Wert gesetzt oder leer

Hallo zusammen,

ich habe eine Tabelle in der Webservice Antworten protokolliert werden. Zu denen, die durchgekommen sind, wird ein Wert erfasst (genauer Antwort String mit immer unterschiedlichen Werten). Wenn dieser nicht erfolgreich ist, steht schlicht nichts (NULL) darin.

Ich möchte nun zählen, wie viele erfolgreich und wie viele nicht erfolgreich werden. Also "count" ist gesetzt. Ich komme jetzt natürlich immer auf eine Gesamtzahl (also der erfolg- und der nicht erfolgreichen). Wie kann ich das sauber trennen?

Bis hierhin komme ich:

select count(Webservice_Response) from <Tabelle> as Anzahl_Requests
where CAST(....) -- (hier muss ich einiges umbauen)

Leider endet es da schon, denn in dem "Webservice_Response" kann entweder NULL oder eben irgendwas stehen. Wie bekomme ich das sauber nach 2 Werten getrennt gezählt angezeigt?

Danke - ich hoffe das ist halbwegs verständlich.

Content-Key: 425853

Url: https://administrator.de/contentid/425853

Printed on: April 26, 2024 at 16:04 o'clock

Member: TheJoker2305
Solution TheJoker2305 Mar 07, 2019 at 14:53:19 (UTC)
Goto Top
Hallo,

mein Lösungsansatz bei MS SQL wäre hierbei folgender (MySQL sollte ähnlich funktionieren):

select 
    DATUMSFELD,
     count(Webservice_Response) as Anzahl_Requests,
     sum(case when isnull(Webservice_Response) then 1 else 0 end) as Anzahl_Null,
     sum(case when isnull(Webservice_Response) then 0 else 1 end) as Anzahl_Eintraege
from 
     <Tabelle> 
where
     CAST(....) -- (hier muss ich einiges umbauen)
group by
     convert(date, DATUMSFELD, 104)

Hier erweitert um eine Gruppierung nach einem formatierten Datumsfeld (auf Jahr, Monat, Tag beschränkt), da du sonst alle Daten der Tabelle auswertest undso alls auf Tagesebene. eine Filterung auf Monats- / Jahresebene ist dann natürlich jederzeit über die WHERE-Klausel möglich.

Eine Filterung nach den unterschiedlichen Inhalten
ließe sich per sum(case when Webservice_Response like '%BEGRIFF%' then 1 else 0 end) as Begriff umsetzen.
Wobei hier je nach Kombination der Begriffe auch insgesamt eine höhere Anzahl bei den Begriffen als Gesamtzeilen auftreten kann.z.B.:

Websevice_Response
Hallo
Hallo Test
Test
noch ein Test

ergibt
count(Webservice_Response) as Anzahl_Requests,  --> 4
sum(case when Webservice_Response like '%Hallo%' then 1 else 0 end) as Hallo,   --> 2  
sum(case when Webservice_Response like '%Test%' then 1 else 0 end) as Begriff, --> 3  
sum(case when Webservice_Response like '%noch%' then 1 else 0 end) as noch --> 1  

Beste Grüße
thejoker2305
Member: Schniefnase
Schniefnase Mar 07, 2019 at 18:43:45 (UTC)
Goto Top
Sauber, vielen Dank. Werde ich morgen mal austesten - aber das sieht jetzt schon plausibel aus face-smile
Member: Schniefnase
Schniefnase Mar 11, 2019 at 14:12:43 (UTC)
Goto Top
Das hat mir geholfen! Vielen Dank face-smile