Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O que uma função agregada pode fazer na cláusula ORDER BY?


Seus resultados são mais claros se você realmente selecionar os valores agregados em vez de colunas da tabela:
SELECT SUM(id) FROM plant ORDER BY SUM(id)

Isso retornará a soma de todos os IDs. Este é, obviamente, um exemplo inútil porque a agregação sempre criará apenas uma linha, portanto, não há necessidade de ordenação. A razão pela qual você obtém uma linha com colunas em sua consulta é porque o MySQL escolhe uma linha, não aleatoriamente, mas também não determinística. Acontece que é a primeira coluna da tabela no seu caso, mas outras podem obter outra linha dependendo do mecanismo de armazenamento, chaves primárias e assim por diante. A agregação apenas na cláusula ORDER BY não é muito útil.

O que você geralmente quer fazer é agrupar por um determinado campo e depois ordenar o conjunto de resultados de alguma forma:
SELECT fruit, COUNT(*)
FROM plant
GROUP BY fruit
ORDER BY COUNT(*)

Agora que é uma consulta mais interessante! Isso lhe dará uma linha para cada fruta junto com a contagem total para aquela fruta. Tente adicionar mais algumas maçãs e a ordem realmente começará a fazer sentido:

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

A consulta acima:
+--------+----------+
| fruit  | COUNT(*) |
+--------+----------+
| orange |        1 |
| banana |        2 |
| apple  |        3 |
+--------+----------+