Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Welche Zeilenfelder werden beim Gruppieren mit MySQL zurückgegeben?

Welche ID wird zurückgegeben ( 1, 2 oder 3 )?

A:Der Server wählt für alle Datensätze mit demselben Namen die gewünschte ID (höchstwahrscheinlich die am schnellsten abzurufende, was unvorhersehbar ist). Um die offizielle Dokumentation zu zitieren:

Viel mehr Informationen in diesem Link .

Welche ID geht an ORDER BY (dieselbe wie zurückgegeben? ... siehe Frage 1)?

Es macht keinen Sinn, herauszufinden, in welcher Reihenfolge die abgerufenen Daten zurückgegeben werden, da Sie das Ergebnis nicht vorhersagen können. Es ist jedoch sehr wahrscheinlich, dass Sie das Ergebnis nach der unvorhersehbaren ID-Spalte sortiert erhalten.

Können Sie steuern, welche ID zurückgegeben/für die Bestellung verwendet wird? z.B. Gibt die größte ID oder die erste ID einer GRUPPE zurück.

Sie sollten an dieser Stelle davon ausgehen, dass Sie es nicht können. Lesen Sie noch einmal die Dokumentation.

Um es noch klarer zu machen:Sie können das Ergebnis einer falsch verwendeten GROUP BY-Klausel nicht vorhersagen. Das Hauptproblem bei MySQL besteht darin, dass Sie es auf nicht standardmäßige Weise verwenden können, aber Sie müssen wissen, wie Sie diese Funktion nutzen. Der Hauptpunkt dahinter ist, nach Feldern zu gruppieren, von denen Sie wissen, dass sie immer gleich sein werden. ZB:

SELECT id, name, COUNT( * ) AS frequency
FROM table
GROUP BY id

Hier kennen Sie name wird als id eindeutig sein bestimmt funktional name . Das Ergebnis, das Sie kennen, ist also gültig. Wenn Sie auch nach Namen gruppieren, wäre diese Abfrage eher Standard, wird aber in MySQL etwas schlechter abschneiden.

Als abschließende Anmerkung sollten Sie berücksichtigen, dass meiner Erfahrung nach die Ergebnisse in diesen nicht standardmäßigen Abfragen für die ausgewählten und nicht gruppierten Felder normalerweise diejenigen sind, die Sie erhalten würden, wenn Sie ein GROUP BY anwenden würden und dann ein ORDER BY auf diesem Feld. Deshalb scheint es so oft arbeiten. Wenn Sie jedoch weiter testen, werden Sie irgendwann feststellen, dass dies in 95 % der Fälle passiert. Und auf diese Nummer können Sie sich nicht verlassen.