Mysql
 sql >> Database >  >> RDS >> Mysql

Cosa può fare una funzione aggregata nella clausola ORDER BY?

I tuoi risultati sono più chiari se selezioni effettivamente i valori aggregati anziché le colonne dalla tabella:

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

Questo restituirà la somma di tutti gli ID. Questo è ovviamente un esempio inutile perché l'aggregazione creerà sempre solo una riga, quindi non è necessario ordinare. Il motivo per cui ottieni una riga con le colonne nella tua query è perché MySQL seleziona una riga, non a caso ma nemmeno deterministica. Accade solo che nel tuo caso sia la prima colonna della tabella, ma altri potrebbero ottenere un'altra riga a seconda del motore di archiviazione, delle chiavi primarie e così via. L'aggregazione solo nella clausola ORDER BY non è quindi molto utile.

Quello che di solito vuoi fare è raggruppare in base a un determinato campo e quindi ordinare il set di risultati in qualche modo:

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

Questa è una domanda più interessante! Questo ti darà una riga per ogni frutto insieme al conteggio totale per quel frutto. Prova ad aggiungere altre mele e l'ordine inizierà effettivamente ad avere un senso:

Tabella completa:

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

La query sopra:

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