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

Was kann eine Aggregatfunktion in der ORDER BY-Klausel tun?

Ihre Ergebnisse sind klarer, wenn Sie tatsächlich die aggregierten Werte anstelle von Spalten aus der Tabelle auswählen:

SELECT SUM(id) FROM plant ORDER BY SUM(id)

Dies gibt die Summe aller IDs zurück. Dies ist natürlich ein nutzloses Beispiel, da die Aggregation immer nur eine Zeile erstellt und daher keine Bestellung erforderlich ist. Der Grund, warum Sie in Ihrer Abfrage eine Zeile mit Spalten erhalten, liegt darin, dass MySQL eine Zeile auswählt, nicht zufällig, aber auch nicht deterministisch. Es ist einfach so, dass es in Ihrem Fall die erste Spalte in der Tabelle ist, aber andere können je nach Speicher-Engine, Primärschlüsseln usw. eine andere Zeile erhalten. Aggregation nur in der ORDER BY-Klausel ist daher nicht sehr sinnvoll.

Was Sie normalerweise tun möchten, ist nach einem bestimmten Feld zu gruppieren und dann die Ergebnismenge auf irgendeine Weise zu ordnen:

SELECT fruit, COUNT(*)
FROM plant
GROUP BY fruit
ORDER BY COUNT(*)

Das ist jetzt eine interessantere Abfrage! Dadurch erhalten Sie eine Zeile für jede Frucht zusammen mit der Gesamtzahl für diese Frucht. Versuchen Sie, noch mehr Äpfel hinzuzufügen, und die Reihenfolge wird tatsächlich sinnvoll:

Vollständige Tabelle:

+----+--------+
| id | fruit  |
+----+--------+
|  1 | banana |
|  2 | apple  |
|  3 | orange |
|  4 | apple  |
|  5 | apple  |
|  6 | banana |
+----+--------+

Die Abfrage oben:

+--------+----------+
| fruit  | COUNT(*) |
+--------+----------+
| orange |        1 |
| banana |        2 |
| apple  |        3 |
+--------+----------+