.Philipp: [MySQL] Distinct oder group by

Hallo,

mir erschließt sich nicht so ganz, was distinct von group by unterscheidet und was ich in meinem Fall nehmen sollte (denn aktuell liefern beide das richtige Ergebnis).

Meine DB sieht so aus:

id | name |    datum   | count
 1 |   A  | 2008-01-01 |   5
 2 |   B  | 2008-01-01 |   1
 3 |   A  | 2008-01-02 |   7
 4 |   A  | 2008-01-03 |   4
 5 |   B  | 2008-01-03 |   3

So, nun möchte ich diese Ausgabe:

A:
2008-01-01: 5
2008-01-02: 7
2008-01-03: 4

B:
2008-01-01: 1
2008-01-03: 3

Wenn ich das ganze mit "SELECT name FROM stats ORDER BY name ASC" anspreche, erhalte ich ja dieses Ergebnis mit mehrfacher Ausgabe für jeden Namen:

A:
2008-01-01: 5
2008-01-02: 7
2008-01-03: 4

A:
2008-01-01: 5
2008-01-02: 7
2008-01-03: 4

A:
2008-01-01: 5
2008-01-02: 7
2008-01-03: 4

B:
2008-01-01: 1
2008-01-03: 3

B:
2008-01-01: 1
2008-01-03: 3

Muss ich die DB-Abfrage jetzt mit 'distinct name' oder mit 'GROUP BY name' machen um im Ergebnis keine doppelten Ausgaben zu erhalten?

Wie gesagt, funktionieren tut beides - im Moment. Aber vielleicht gibts irgdenwann den Fall, dass eines von beiden nicht mehr funktioniert. Denn identisch sind die Funktionen ja wohl nicht!?

  1. Hallo,

    naja, mit DISTINCT zusammen kannst du keine Aggregatsfunktionen wie COUNT(), AVG(), MAX() etc verwenden, dazu brauchst du GROUP BY. Dass mySQL da sich nicht an den Standard hält und Aggregatsfunktionen auch ohne GROUP BY erlaubt, ist ne andere Geschichte.

    Und wenn du dir den Ausführungsplan (EXPLAIN heisst das Kommand dafür imho) für deine Abfrage anzeigen lässt, dann wirst du wahrscheinlich feststellen, dass die DB genau dassselbe macht.

    DISTINCT erstreckt sich auch über gesamte abfragte Tupel von Spalten. Eine SELECT feldA, DISTINCT feldb, feldc geht nicht.

    Ciao, Frank

    1. Vielen Dank, dann weiß ich Bescheid :-)