J'ai une requête SQL Select qui a un groupe par. Je veux compter tous les enregistrements après l'instruction group by. Existe-t-il un moyen pour cela directement à partir de SQL? Par exemple, ayant une table avec des utilisateurs, je veux sélectionner les différentes villes et le nombre total d'utilisateurs
select town, count(*) from user
group by town
Je veux avoir une colonne avec toutes les villes et une autre avec le nombre d'utilisateurs dans toutes les lignes.
Un exemple du résultat pour avoir 3 villes et 58 utilisateurs au total est:
Town Count
Copenhagen 58
NewYork 58
Athens 58
Réponses:
Cela fera ce que vous voulez (liste des villes, avec le nombre d'utilisateurs dans chacune):
Vous pouvez utiliser la plupart des fonctions d'agrégation lors de l'utilisation
GROUP BY
.Mise à jour (suite au changement de question et commentaires)
Vous pouvez déclarer une variable pour le nombre d'utilisateurs et la définir sur le nombre d'utilisateurs, puis sélectionner avec cela.
la source
*
... L'OP a répondu à sa propre question, mais ne semble même pas le tester, je valide juste qu'il est correct :) fredosaurus.com/notes-db/select/groupby.htmlVous pouvez utiliser
COUNT(DISTINCT ...)
:la source
town
colonne, et c'estCOUNTs
la mauvaise chose (ville au lieu d'utilisateur).L'autre façon est:
la source
Avec Oracle, vous pouvez utiliser des fonctions analytiques:
Vos autres options sont d'utiliser une sous-requête:
la source
Si vous souhaitez commander par nombre (cela semble simple mais je ne trouve pas de réponse sur la pile de la façon de le faire), vous pouvez le faire:
la source
Dix réponses non supprimées; la plupart ne font pas ce que l'utilisateur a demandé. La plupart des réponses ont mal interprété la question en pensant qu'il y avait 58 utilisateurs dans chaque ville au lieu de 58 au total. Même les quelques correctes ne sont pas optimales.
SHOW session status LIKE 'Handler%';
Dans le contexte du PO:
Puisqu'il n'y a qu'une seule ligne
tot
, leCROSS JOIN
n'est pas aussi volumineux qu'il pourrait l'être autrement.Le modèle habituel est
COUNT(*)
au lieu deCOUNT(town)
. Cette dernière implique de vérifiertown
qu'elle n'est pas nulle, ce qui n'est pas nécessaire dans ce contexte.la source
Vous pouvez utiliser DISTINCT à l'intérieur du COUNT comme ce que dit milkovsky
dans mon cas:
Cela va tirer le nombre de votes de réponse considéré comme le même user_id qu'un seul compte
la source
Je sais que c'est une ancienne publication dans SQL Server:
la source
IFNULL
au lieu deISNULL
) conduit à des nombres différents pour chaque ville; l'utilisateur voulait le total. Selon la question, 58, et non 174, est le total.Si vous souhaitez sélectionner la ville et le nombre total d'utilisateurs, vous pouvez utiliser cette requête ci-dessous:
la source
User
.si vous souhaitez utiliser l'option Sélectionner toutes les requêtes avec nombre, essayez ceci ...
la source
Essayez le code suivant:
la source