Was kann eine Aggregat-Funktion in der ORDER BY-Klausel?
Können sagen, ich habe eine Anlage Tabelle:
id fruit
1 banana
2 apple
3 orange
Ich diese
SELECT * FROM plant ORDER BY id;
SELECT * FROM plant ORDER BY fruit DESC;
denen tut das offensichtliche.
Aber ich wurde gebissen von dieser, was macht das?
SELECT * FROM plant ORDER BY SUM(id);
SELECT * FROM plant ORDER BY COUNT(fruit);
SELECT * FROM plant ORDER BY COUNT(*);
SELECT * FROM plant ORDER BY SUM(1) DESC;
Alle diese kehren nur die erste Zeile (die mit der id = 1).
- Was passiert Motorraum?
- Was sind die Szenarien, in denen die Aggregat-Funktion in handliches kommen in
ORDER BY
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Ergebnisse sind klarer, wenn Sie tatsächlich wählen Sie die aggregierten Werte anstelle von Spalten aus der Tabelle:
Wird das Ergebnis der Summe aller id ' s. Das ist natürlich ein nutzloses Beispiel, weil die aggregation wird immer nur eine Zeile, daher keine Notwendigkeit für die Bestellung. Der Grund, warum Sie bekommen eine Reihe qith Spalten in Ihrer Abfrage ist, weil MySQL wählt eine Zeile, nicht zufällig, aber nicht deterministisch entweder. Es passiert einfach so, dass es die erste Spalte in der Tabelle in deinem Fall, aber andere vielleicht eine andere Zeile, je nach Speicher-engine, primary keys und so weiter. Aggregation nur in der ORDER BY-Klausel ist daher nicht sehr nützlich.
Dem, was Sie normalerweise tun möchte, ist das gruppieren nach einem bestimmten Feld und dann, um die Ergebnismenge in gewisser Weise:
Nun, das ist ein interessanter Abfrage! Dadurch erhalten Sie eine Zeile für jede Frucht zusammen mit der Gesamtzahl für das Obst. Versuchen Sie, einige mehr äpfel und die Bestellung tatsächlich an den start making sense:
Komplette Tabelle:
Die obige Abfrage:
Alle diese Fragen werden alle geben Sie eine syntax-Fehler, die auf jeder SQL-Plattform, die-konform mit SQL-standards.
Auf PostgreSQL, zum Beispiel, alle diese Fragen erhöhen die gleichen Fehler.
Das bedeutet, dass Sie eine Domänen-Aggregatfunktion ohne GROUP BY. SQL Server-und Oracle-return ähnliche Fehlermeldungen.
MySQL hat GROUP BY ist bekannt, um gebrochen zu werden, in mehrfacher Hinsicht, zumindest so weit wie standard-Verhalten betrifft. Aber die Abfragen, die Sie geschrieben waren, ein neues fehlerhaftes Verhalten zu mir, also +1 für das.
Anstatt zu versuchen, zu verstehen, was es tut unter der Haube, du bist wahrscheinlich besser schreiben lernen standard GROUP BY-Abfragen. MySQL wird Prozess-standard-GRUPPE DURCH Aussagen richtig, soweit ich weiß.
Früheren Versionen von MySQL-docs gewarnt, Sie über GROUP BY und versteckte Spalten. (Ich habe keine Referenz, aber dieser text wird zitiert, die alle über dem Platz.)
Neuere Versionen sind ein wenig anders.
Ich persönlich halte nicht unbestimmten eine Funktion in SQL.
Wenn Sie ein Aggregat verwenden möchten, die der Abfrage wird eine implizite Gruppe durch, wo das gesamte Ergebnis ist eine einzelne Gruppe.
Verwendung einer Aggregatfunktion in order by ist nur nützlich, wenn Sie haben auch eine Gruppe, so dass Sie können mehr als eine Zeile in der Ergebnismenge.