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

Como ordenar por contagem em SQL?

Problema:


Você agregou dados em grupos, mas deseja classificar os registros em ordem decrescente pelo número de elementos nos grupos.

Exemplo:


Nosso banco de dados tem uma tabela chamada user com dados nas seguintes colunas:id , first_name , last_name e country .
id first_name last_name país
1 Lisa Williams Inglaterra
2 Gary Anders Polônia
3 Tom Williams Polônia
4 Michael Marrom França
5 Susan Smith EUA
6 Ana Jones EUA
7 Ellie Moleiro Polônia

Vamos criar um relatório sobre nossos usuários. Agruparemos os resultados por country e conte o número de usuários de cada país. Mas também classificaremos os grupos em ordem decrescente por número de usuários. Dessa forma, os países com maior número de usuários aparecerão no topo.

Solução:

SELECT country,
 COUNT(id) 
FROM user
GROUP BY  country
ORDER BY COUNT(id) DESC ;
país contagem(id)
Polônia 3
EUA 2
Inglaterra 1
França 1

Discussão:


Para ordenar os registros selecionados pelo número de elementos em cada grupo, você usa o ORDER BY cláusula.

O primeiro passo é usar o GROUP BY cláusula para criar os grupos (no nosso exemplo, agrupamos pelo country coluna). Então, na cláusula ORDER BY, você usa a função agregada COUNT, que conta o número de valores na coluna de sua escolha; em nosso exemplo, contamos IDs distintos com COUNT(id) . Isso efetivamente conta o número de elementos em cada grupo. O ORDER BY cláusula então classifica os grupos de acordo com esse cálculo.

Como de costume, você pode usar a ordem crescente ou decrescente com ORDER BY . Se você quiser ordem decrescente (como neste exemplo), use o DESC palavra-chave. A ordem crescente não precisa de nenhuma palavra-chave porque é o padrão, mas você pode usar o ASC palavra-chave se você quiser ser explícito. Este é o mesmo exemplo, mas com os resultados classificados em ordem crescente:

Solução:

SELECT country,
 COUNT(id) 
FROM user
GROUP BY  country
ORDER BY COUNT(id);

Aqui está o resultado:
país contagem(id)
Inglaterra 1
França 1
EUA 2
Polônia 3