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.