sql >> Database >  >> RDS >> Mysql

Wat kan een aggregatiefunctie doen in de ORDER BY-component?

Uw resultaten zijn duidelijker als u de totaalwaarden selecteert in plaats van kolommen uit de tabel:

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

Dit zal de som van alle id's teruggeven. Dit is natuurlijk een nutteloos voorbeeld omdat de aggregatie altijd maar één rij zal maken, dus bestellen is niet nodig. De reden dat u een rij met kolommen in uw zoekopdracht krijgt, is omdat MySQL één rij kiest, niet willekeurig maar ook niet deterministisch. Het is gewoon zo dat het in uw geval de eerste kolom in de tabel is, maar anderen kunnen een andere rij krijgen, afhankelijk van de opslagengine, primaire sleutels enzovoort. Aggregatie alleen in de ORDER BY-component is dus niet erg nuttig.

Wat u gewoonlijk wilt doen, is groeperen op een bepaald veld en vervolgens de resultatenset op de een of andere manier ordenen:

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

Dat is een interessantere vraag! Dit geeft je een rij voor elke vrucht samen met het totale aantal voor die vrucht. Probeer wat meer appels toe te voegen en het bestellen begint echt logisch te worden:

Volledige tabel:

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

De bovenstaande vraag:

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


  1. VS 2019 en MySQL Entity Framework dubbele databasenaam

  2. Komt SQL 'EN' of 'OF' eerst?

  3. Hoe pg_typeof() werkt in PostgreSQL

  4. Het maken van een trigger voor het invoegen van een onderliggende tabel geeft een verwarrende fout