sql >> Base de Datos >  >> RDS >> Database

Cómo ordenar filas por suma de grupo en SQL

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.