Philipp Hasenfratz: Group by funktioniert nicht

Beitrag lesen

Halihallo Bine

...Ich möchte nun erreichen, dass nur der Datensatz aus der DB geholt wird, bei dem wtsc maximal ist.

Welche RDBMS verwendest du? - MySQL... höchst wahrscheinlich.

versucht, aber dann passiert etwas ganz seltsames. Ich bekomme dann zwar nur einen Datensatz und in diesem Datensatz ist wtsc auch maximal, aber die restlichen Spalten gehören eigentlich gar nicht zu dieser Zeile:

Nun, ein Bug oder Feature von MySQL. Wenn du nach tbl_100_00_id
gruppierst, müssen alle anderen Attribute ("Spalten") mit einer
Agregatsfunktion umschlossen werden (MIN,MAX,AVG,SUM,COUNT,...). Tust
du dies nicht, müsste der Query-Parser mit einer Fehlermeldung
abbrechen. MySQL tut dies leider nicht, die folge ist, dass MySQL
einfach und zufällig etwas auswählt.

Überlege mal: Du hast zwei Datensätze in tbl_100_00 mit der ID 22.
Du lässt wcost selektieren ohne Agregatsfunktion. Welches wcost von
den zwei Datensätzen soll denn nun verwendet werden? - Natürlich
wirst du mir jetzt antworten, dass dasjenige ausgewählt werden soll,
wo auch wtsc maximal ist. Nun, du irrst, denn sobald du gruppierst,
ist jedwelche Definition eines Datensatzes zerstört, du generierst
sozusagen einen neuen und dieser hat "zwei wcost". Was nun mit diesen
zwei wcost geschehen soll, um einen Wert daraus zu selektieren,
kannst du mit den genannten Agregatsfunktionen tun.

wie kann das sein und was stimmt an meiner group by abfrage nicht?

  • Keine Agregatsfunktionen verwendet.
  • Nach keinem eineindeutigen Attribut (z.B. PrimaryKey) gruppiert
      (dann ginge es nämlich).

Viele Grüsse

Philipp

--
M$: Patches - don't.