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-ID: 425853

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

Ausgedruckt am: 25.11.2024 um 18:11 Uhr

TheJoker2305
Lösung TheJoker2305 07.03.2019 um 15:53:19 Uhr
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
Schniefnase
Schniefnase 07.03.2019 um 19:43:45 Uhr
Goto Top
Sauber, vielen Dank. Werde ich morgen mal austesten - aber das sieht jetzt schon plausibel aus face-smile
Schniefnase
Schniefnase 11.03.2019 um 15:12:43 Uhr
Goto Top
Das hat mir geholfen! Vielen Dank face-smile