Sql Abfrage count?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
SELECT jahr, monat, strasse, SUM(anzahl) AS gesamtanzahl
FROM fahrzeugzaehlung
GROUP BY jahr, monat, strasse 

Deins (wenn ich es richtig lese) sieht so aus:

SELECT count(anzahl) AS gesamtanzahl
FROM fahrzeugzaehlung
WHERE anzahl=monat AND anzahl=strasse
GROUP BY gesamtanzahl

Da sind mehrere Fehler drin:

  • Mit "count(anzahl)" zählst du die Anzahl Zeilen, die jeweils zusammengefasst werden. Da anscheinend pro Stunde eine Zeile erstellt wird, kriegst du also immer ein Wert zwischen 672 und 744 (Stunden pro Monat) raus, unabhängig davon wieviele Autos in der Zeit gezählt wurden. Richtig ist an der Stelle also Sum(anzahl). Zusätzlich willst du natürlich noch wissen zu was die Zahlen gehören, die da ausgegeben werden, also musst du noch Jahr, Monat und Straße mit in die Spalten aufnehmen, die ausgegeben werden.
  • "Where anzahl=monat" gibt dir nur die Datensätze aus, bei denen die Anzahl Autos in der jeweiligen Stunde mit der Monatszahl übereinstimmt.
  • "And anzahl=strasse": Die meisten Datenbankprogramme werden dir hier einen Fehler ausgeben, weil sie keine Zahl mit einem Text vergleichen können. Bei Datenbanken, die automatisch versuchen, die Werte umzuwandeln (z.B. MS Access) wirst du aber vermutlich keine Ergebnisse rauskriegen, weil es keine Straßennamen gibt, die nur aus Zahlen bestehen (und bei denen dann noch zufällig die gezählte Anzahl Autos pro Stunde mit dem Namen der Straße übereinstimmt)
  • "Group By Gesamtanzahl": Einerseits kann man nicht nach dem Ergebnis einer Aggregatfunktion gruppieren, andererseits können die meisten Datenbanksysteme beim Group By oder beim Where nicht den Alias einer Spalte benutzen. Du willst hier nach Monat und Straße gruppieren. Da die Monatszahlen sich jedes Jahr wiederholen, musst du zusätzlich nach Jahr gruppieren. Viele Datenbanksysteme geben dir auch einen Fehler aus, wenn du eine Abfrage mit einer Gruppierung benutzt, bei der nicht alle Spalten entweder gruppiert oder in eine Aggregatfunktion gepackt werden.

EllieHier 
Fragesteller
 05.02.2020, 20:02

Wow, eine sehr ausführliche Antwort. Das hat mir wirklich weiter geholfen. Ich danke Ihnen vielmals!

1

select sum(anzahl) Gesamtanzahl .... group by jahr, monat, strasse