Database
 sql >> Base de données >  >> RDS >> Database

Comment commander par nombre en SQL ?

Problème :

Vous avez regroupé des données dans des groupes, mais vous souhaitez trier les enregistrements par ordre décroissant en fonction du nombre d'éléments dans les groupes.

Exemple :

Notre base de données a une table nommée user avec des données dans les colonnes suivantes :id , first_name , last_name , et country .

identifiant prénom nom_de_famille pays
1 Lisa Williams Angleterre
2 Gary Anders Pologne
3 Tom Williams Pologne
4 Michel Marron France
5 Susan Smith États-Unis
6 Anne Jones États-Unis
7 Élie Miller Pologne

Créons un rapport sur nos utilisateurs. Nous regrouperons les résultats par country et compter le nombre d'utilisateurs de chaque pays. Mais nous allons également trier les groupes par ordre décroissant du nombre d'utilisateurs. De cette façon, les pays avec le plus grand nombre d'utilisateurs apparaîtront en haut.

Solution :

SELECT country,
 COUNT(id) 
FROM user
GROUP BY  country
ORDER BY COUNT(id) DESC ;
pays count(id)
Pologne 3
États-Unis 2
Angleterre 1
France 1

Discussion :

Pour trier les enregistrements sélectionnés par le nombre d'éléments dans chaque groupe, vous utilisez le ORDER BY clause.

La première étape consiste à utiliser le GROUP BY clause pour créer les groupes (dans notre exemple, nous regroupons par le country colonne). Ensuite, dans la clause ORDER BY, vous utilisez la fonction d'agrégation COUNT, qui compte le nombre de valeurs dans la colonne de votre choix; dans notre exemple, nous comptons les identifiants distincts avec COUNT(id) . Cela compte effectivement le nombre d'éléments dans chaque groupe. Le ORDER BY clause trie ensuite les groupes en fonction de ce calcul.

Comme d'habitude, vous pouvez utiliser l'ordre croissant ou décroissant avec ORDER BY . Si vous voulez un ordre décroissant (comme dans cet exemple), vous utilisez le DESC mot-clé. L'ordre croissant n'a pas besoin de mot-clé car c'est la valeur par défaut, mais vous pouvez utiliser le ASC mot-clé si vous voulez être explicite. C'est le même exemple mais avec les résultats triés par ordre croissant :

Solution :

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

Voici le résultat :

pays count(id)
Angleterre 1
France 1
États-Unis 2
Pologne 3