sql >> Base de Datos >  >> RDS >> Mysql

¿Qué puede hacer una función agregada en la cláusula ORDER BY?

Sus resultados son más claros si realmente selecciona los valores agregados en lugar de las columnas de la tabla:

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

Esto devolverá la suma de todas las identificaciones. Este es, por supuesto, un ejemplo inútil porque la agregación siempre creará solo una fila, por lo tanto, no es necesario ordenar. La razón por la que obtiene una fila con columnas en su consulta es porque MySQL elige una fila, no al azar pero tampoco determinista. Da la casualidad de que es la primera columna de la tabla en su caso, pero otros pueden obtener otra fila según el motor de almacenamiento, las claves principales, etc. La agregación solo en la cláusula ORDER BY no es muy útil.

Lo que generalmente desea hacer es agrupar por un campo determinado y luego ordenar el conjunto de resultados de alguna manera:

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

Ahora que es una consulta más interesante! Esto le dará una fila para cada fruta junto con el recuento total de esa fruta. Intente agregar algunas manzanas más y el pedido comenzará a tener sentido:

Tabla completa:

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

La consulta anterior:

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