Database
 sql >> Base de Dados >  >> RDS >> Database

Como ordenar linhas por soma de grupo no SQL

Problema:


Você gostaria de ordenar as linhas pelas somas geradas por um grupo de registros.

Exemplo:


Nosso banco de dados tem uma tabela chamada training com dados em quatro colunas:id , entrar , ano , e pontuação .
id entrar ano pontuação
1 Andy 2018 24
2 Lucy 2019 25
3 Andy 2019 20
4 Lucy 2018 16
5 Gary 2019 18
6 Gary 2018 19
7 Gary 2017 22
8 Lucy 2017 21
9 Andy 2017 26

Vamos obter o nome de login de cada jogador junto com a soma total da pontuação em todos os anos, colocando os registros em ordem decrescente de acordo com as pontuações totais dos jogadores.

Solução:


Usaremos o operador ORDER BY para ordenar registros com base na função agregada SUM() , que calcula a pontuação total de cada jogador em todos os anos.

Aqui está a consulta que você escreveria:
SELECT login,
  SUM(score) AS total_score
FROM training
GROUP BY login
ORDER BY SUM(score) DESC;

Aqui está o resultado:
login total_score
Andy 70
Lucy 62
Gary 59

Discussão:


Use ORDER BY se quiser ordenar as linhas de acordo com um valor retornado por uma função agregada como SUM() . O operador ORDER BY é seguido pela função agregada (no nosso exemplo, SUM() ). DESC é colocado após esta função para especificar uma ordem de classificação decrescente. Assim, os valores agregados mais altos são exibidos primeiro e, em seguida, os valores progressivamente mais baixos são exibidos. Para classificar em ordem crescente, você pode especificar ASC ou simplesmente omitir qualquer palavra-chave, pois a ordem de classificação padrão é crescente.

Na consulta acima, selecionamos o login de cada jogador e a soma de sua pontuação para todos os anos. Essa pontuação total é calculada usando SUM() com a coluna de pontuação como argumento. Adicionamos um alias para esse valor agregado (SUM(score) AS total_score ); você pode usar este alias em vez da função agregada na cláusula ORDER BY (ORDER BY total_score DESC ).

Observe que incluímos login no GRUPO POR. Se incluirmos uma coluna em SELECT, também devemos usar a coluna em GROUP BY. Neste exemplo, usamos a cláusula GROUP BY seguida da coluna login porque colocamos essa coluna no SELECT. Observe que GROUP BY é colocado antes de ORDER BY na consulta.