(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.
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 425853
Url: https://administrator.de/contentid/425853
Ausgedruckt am: 25.11.2024 um 18:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo,
mein Lösungsansatz bei MS SQL wäre hierbei folgender (MySQL sollte ähnlich funktionieren):
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
Beste Grüße
thejoker2305
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