Problema:
Le gustaría ordenar las filas por las sumas generadas por un grupo de registros.
Ejemplo:
Nuestra base de datos tiene una tabla llamada training
con datos en cuatro columnas:id , iniciar sesión , año y puntuación .
id | iniciar sesión | año | puntuación |
---|---|---|---|
1 | Andy | 2018 | 24 |
2 | Lucía | 2019 | 25 |
3 | Andy | 2019 | 20 |
4 | Lucía | 2018 | 16 |
5 | Gary | 2019 | 18 |
6 | Gary | 2018 | 19 |
7 | Gary | 2017 | 22 |
8 | Lucía | 2017 | 21 |
9 | Andy | 2017 | 26 |
Obtengamos el nombre de inicio de sesión de cada jugador junto con la suma total de la puntuación de todos los años, colocando los registros en orden descendente según la puntuación total de los jugadores.
Solución:
Usaremos el operador ORDER BY para ordenar registros basados en la función agregada SUM()
, que calcula la puntuación total de cada jugador en todos los años.
Esta es la consulta que escribirías:
SELECT login, SUM(score) AS total_score FROM training GROUP BY login ORDER BY SUM(score) DESC;
Aquí está el resultado:
iniciar sesión | puntuación_total |
---|---|
Andy | 70 |
Lucía | 62 |
Gary | 59 |
Discusión:
Use ORDER BY si desea ordenar filas de acuerdo con un valor devuelto por una función agregada como SUM()
. El operador ORDER BY es seguido por la función agregada (en nuestro ejemplo, SUM()
). DESC se coloca después de esta función para especificar un orden de clasificación descendente. Por lo tanto, los valores agregados más altos se muestran primero, luego se muestran progresivamente los valores más bajos. Para ordenar en orden ascendente, puede especificar ASC o simplemente omitir cualquiera de las palabras clave, ya que el orden de clasificación predeterminado es ascendente.
En la consulta anterior, seleccionamos el inicio de sesión de cada jugador y la suma de su puntaje para todos los años. Esta puntuación total se calcula utilizando SUM() con la columna de puntuación como argumento. Agregamos un alias para este valor agregado (SUM(score) AS total_score
); puede usar este alias en lugar de la función agregada en la cláusula ORDER BY (ORDER BY total_score DESC
).
Tenga en cuenta que incluimos inicio de sesión en el GRUPO POR. Si incluimos una columna en SELECT, también debemos usar la columna en GROUP BY. En este ejemplo, usamos la cláusula GROUP BY seguida de la columna de inicio de sesión porque colocamos esta columna en SELECT. Observe que GROUP BY se coloca antes de ORDER BY en la consulta.