293 votes

Comment utiliser count et grouper par dans la même instruction select

J'ai une requête sql de type select qui a un groupe par. Je veux compter tous les enregistrements après l'instruction group by. Est-il un moyen pour que cela directement à partir de sql? Par exemple, avoir un tableau avec les utilisateurs, je veux sélectionner les différentes villes et le total du nombre d'utilisateurs

select town, count(*) from user
group by town

Je veux avoir une colonne avec toutes les villes et un autre avec le nombre d'utilisateurs dans toutes les lignes.

Un exemple de résultat pour avoir 3 villes et 58 utilisateurs dans le total est de :

Town         Count
Copenhagen   58
NewYork      58
Athens       58

340voto

Oded Points 271275

Cela fera ce que vous voulez (liste des villes, avec le nombre d'utilisateurs dans chaque):

 select town, count(town) 
from user
group by town
 

Vous pouvez utiliser la plupart des fonctions d'agrégat lorsque vous utilisez GROUP BY .

Mise à jour (modification suivante à la question et aux commentaires)

Vous pouvez déclarer une variable pour le nombre d’utilisateurs et la définir sur le nombre d’utilisateurs que vous sélectionnez.

 DECLARE @numOfUsers INT
SET @numOfUsers = SELECT COUNT(*) FROM user

SELECT DISTINCT town, @numOfUsers
FROM user
 

192voto

milkovsky Points 875

Vous pouvez utiliser COUNT(DISTINCT ...) .

Voir le code suivant:

 SELECT COUNT(DISTINCT town) 
FROM user
 

46voto

Charry Wong Points 132

L'autre façon est la suivante:

 select count(*) from
(
  select town, count(*) from user
  group by town
)
 

6voto

Tommi Points 5707

Avec Oracle, vous pouvez utiliser les fonctions analytiques:

 select town, count(town), sum(count(town)) over () total_count from user
group by town
 

Vos autres options sont d'utiliser une sous-requête:

 select town, count(town), (select count(town) from user) as total_count from user
group by town
 

4voto

sagits Points 188

Si vous voulez commander par nombre (son simple mais je ne peux pas trouver une réponse sur la façon de le faire), vous pouvez faire:

         SELECT town, count(town) as total FROM user
        GROUP BY town ORDER BY total DESC
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X