problem mit sql abfrage - wer kann mir helfen?
nina
- datenbank
Hallo Gemeinde,
nun suche ich schon eine Weile im Netz, werde aber leider nicht fündig. Daher schildere ich euch mein Problem.
Ich habe eine Datenbank mit u.a. einer Spalte für die Postleitzahlen. Nun möchte ich eine Abfrage starten, die mir zurück gibt, wieviele Postleitzahlen es jeweils gibt.
Das klappt mit
SELECT plz, count(plz) AS sum FROM tabelle WHERE 1 ORDER BY sum
ganz gut.
Nun möchte ich in dieser Abfrage aber mich nur auf die ersten beiden Ziffern der PLZ beschränken. Also wieviel von PLZ 97, 36, 01 etc in der Tabelle ist. Mit
plz LIKE '97___'
in der SQL Anqeisung mag ich nicht arbeiten, denn dann müsste ich in einer Schleife 99 SQL-Abfragen starten (von PLZ 01 bis 99).
Geht das auch in einer Anweisung?
Freue mich über alle konstruktiven Vorschläge.
Danke und Gruß aus Franken.
hi,
Ich habe eine Datenbank mit u.a. einer Spalte für die Postleitzahlen. Nun möchte ich eine Abfrage starten, die mir zurück gibt, wieviele Postleitzahlen es jeweils gibt.
Das klappt mit
SELECT plz, count(plz) AS sum FROM tabelle WHERE 1 ORDER BY sum
> ganz gut.
ist aber nicht wirklich korrekt, weil du eine aggregatfunktion ohne GROUP BY benutzt.
> Nun möchte ich in dieser Abfrage aber mich nur auf die ersten beiden Ziffern der PLZ beschränken. Also wieviel von PLZ 97, 36, 01 etc in der Tabelle ist. Mit
> ~~~
> plz LIKE '97___'
>
in der SQL Anqeisung mag ich nicht arbeiten, denn dann müsste ich in einer Schleife 99 SQL-Abfragen starten (von PLZ 01 bis 99).
Geht das auch in einer Anweisung?
natürlich.
mysql stellst dir ja auch funktionen zur zeichenkettenverarbeitung zur verfügung, mit denen du nur teile eines feldinhaltes betrachten kannst - LEFT() beispielsweise würde sich hier anbieten.
also die "ersten beiden zeichen" mit COUNT() zählen, und mit GROUP BY nach ihnen gruppieren.
gruß,
wahsaga
yo,
ist aber nicht wirklich korrekt, weil du eine aggregatfunktion ohne GROUP BY benutzt.
um das noch zu ergänzen, jedes andere "normale" dbms würde bei dieser query eine fehlermeldung ausgeben, nur mysql macht das nicht und sorgt dabei leider immer mehr für verwirrung.
Nun möchte ich in dieser Abfrage aber mich nur auf die ersten beiden Ziffern der PLZ beschränken. Also wieviel von PLZ 97, 36, 01 etc in der Tabelle ist.
mysql stellst dir ja auch funktionen zur zeichenkettenverarbeitung zur verfügung, mit denen du nur teile eines feldinhaltes betrachten kannst - LEFT() beispielsweise würde sich hier anbieten.
wenn du wirklich regelmäßig bestimmte einzelne ziffern aus der postleitzahl abrufen willst, dann solltest du dein datenbank-design ändern. deine postleitzahl liegt nämlich nicht in atomarer form vor.
Ilja
hey wahsaga.
ein GROUP BY habe ich auch stehen, wohl vergessen bei copy and paste mitzunehmen.
aber danke, das mit LEFT war mir nicht bekannt.
konnte mein problem jetzt durch folgende abfrage lösen.
SELECT LEFT(plz,2) AS teilplz, COUNT(LEFT(plz,2)) AS sum WHERE 1 GROUP BY teilplz ORDER BY sum
klappt so jedenfalls jetzt.