Frage zu Group und Count
Ralf
- datenbank
1 dedlfix
Hallo!
Mir fehlt der richtige Ansatz für eine korrekte select-Anweisung zu folgenden Ansatz:
In einer Tabelle meiner mysql-Datenbank gibt es mehrere Datensätze, bei denen sich in der Spalte 'nummmer' eine identische Zahl befindet.
Beispiel:
nummer - name - strasse - telefon
445 Meier Sesamstr.1 1234
378 Holz Allestr.5 4545
445 Meier Sesamstr.1 1234
Bei der Ausgabe aller Datensätze möchte ich nur die Zeilen ausgeben, bei denen es sich um eine unterschiedliche Nummer handelt. So werden doppelte und dreifache Zeilen vermieden. Also 'meier' soll nur einmal ausgegeben werden.
Das mache ich über diese select-Anweisung:
"SELECT nummer,browser,zeitpunkt,ziel FROM tao_statistik GROUP BY nummer"
Die Ausgabe funktioniert soweit, jetzt aber möchte ich die jeweilige Anzahl der mehrfach vorgekommenen bestenfalls beim Select ermitteln, also wie oft der 'meier' vorkam.
Einen umständlichen Weg, nämlich während ich die gesamten Daten ausgebe und in jeder Zeile einen zusätzlichen select/count bezogen auf den Wert in der Spalte 'nummer' durchführe, möchte ich u.a. aufgrund der mir dann fehlenden Sortierungsmöglichkeiten vermeiden.
Also, wie zähle ich bereits beim Select und der Gruppierung die mehrfach vorkommenden Nummern?
Hi!
In einer Tabelle meiner mysql-Datenbank gibt es mehrere Datensätze, bei denen sich in der Spalte 'nummmer' eine identische Zahl befindet.
Beispiel:
nummer - name - strasse - telefon
445 Meier Sesamstr.1 1234
378 Holz Allestr.5 4545
445 Meier Sesamstr.1 1234
Anscheinend nicht nur das, sondern auch die restlichen Daten.
Bei der Ausgabe aller Datensätze möchte ich nur die Zeilen ausgeben, bei denen es sich um eine unterschiedliche Nummer handelt. So werden doppelte und dreifache Zeilen vermieden. Also 'meier' soll nur einmal ausgegeben werden.
Das mache ich über diese select-Anweisung:
"SELECT nummer,browser,zeitpunkt,ziel FROM tao_statistik GROUP BY nummer"
Welchen Zusammenhang gibt es zwischen "browser,zeitpunkt,ziel" und "name - strasse - telefon" oder anders: zwischen dieser Abfrage und obiger Tabelle? Angenommen, die obige Tabelle ist des Beispiels wegen gewählt und die Spalten der Abfrage sind nur nicht an das Beispiel angepasst, dann geht solch eine Abfrage bei anderen DBMSen nicht, da bei der Gruppierung nur über nummer, das DBMS nicht weiß, aus welchem Datensatz es die anderen Werte nehmen soll. Die könnten ja durchaus auch verschieden sein. MySQL lässt solche Abfragen zu und nimmt dann einfach irgendeinen Datensatz. Wenn dir das genehm ist, dann kannst du das so lassen.
Die Ausgabe funktioniert soweit, jetzt aber möchte ich die jeweilige Anzahl der mehrfach vorgekommenen bestenfalls beim Select ermitteln, also wie oft der 'meier' vorkam.
Dann müsstest du über den Namen und nicht über die Nummer gruppieren. Es sei denn wiederum, dass unter einer Nummer immer derselbe Name steht, dann passt das so. Nun müsste eigentlich nur noch ein COUNT(*) zur Aufzählung der Felder hinzugefügt werden.
Also, wie zähle ich bereits beim Select und der Gruppierung die mehrfach vorkommenden Nummern?
Du kannst nur alles zählen. Wenn du jedoch nur die mehrfachen in der Ausgabe haben möchtest, kannst du mit einem HAVING COUNT(*) > 1 die Ergebnismenge auch noch nach der Gruppierung einschränken.
Lo!