Mysql
 sql >> Base de données >  >> RDS >> Mysql

Que peut faire une fonction d'agrégation dans la clause ORDER BY ?

Vos résultats sont plus clairs si vous sélectionnez réellement les valeurs agrégées au lieu des colonnes du tableau :

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

Cela renverra la somme de tous les identifiants. Ceci est bien sûr un exemple inutile car l'agrégation ne créera toujours qu'une seule ligne, donc pas besoin de trier. La raison pour laquelle vous obtenez une ligne avec des colonnes dans votre requête est que MySQL sélectionne une ligne, pas au hasard mais pas non plus déterministe. Il se trouve qu'il s'agit de la première colonne du tableau dans votre cas, mais d'autres peuvent obtenir une autre ligne en fonction du moteur de stockage, des clés primaires, etc. L'agrégation uniquement dans la clause ORDER BY n'est donc pas très utile.

Ce que vous voulez généralement faire, c'est regrouper par un certain champ, puis ordonner le jeu de résultats d'une manière ou d'une autre :

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

Voilà une requête plus intéressante ! Cela vous donnera une ligne pour chaque fruit ainsi que le nombre total pour ce fruit. Essayez d'ajouter quelques pommes supplémentaires et la commande commencera à avoir un sens :

Tableau complet :

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

La requête ci-dessus :

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