2010-09-30 13 views
2

j'ai une requête qui vérifie une des tables et des groupes toutes les entrées d'un utilisateur et compte les entréesMysql - Comptez combien de lignes ont un certain nombre?

SELECT username, 
     count(userid) 
    FROM orders 
GROUP BY userid 

Cette retourne une liste de son nom d'utilisateur et le nombre de commandes qu'ils ont soumis

username count(userid) 
------------------------ 
test  1 
test2  1 
test3  3 
test4  3 
test4  3 
test4  3 

Ce que je La requête à faire est de compter le nombre d'utilisateurs ayant des ordres X et de renvoyer ce nombre. Donc, à partir des résultats ci-dessus, les utilisateurs qui ont 1 commande devraient être 2 et les utilisateurs qui ont 3 commandes devraient être 4. Donc sur et ainsi de suite peut-il être fait?

+0

Remarque: Lorsque vous testez (dans le serveur SQL, puisque c'est ce que j'ai à portée de main), vous devez changer votre GROUP BY en "userid, username" pour le faire fonctionner (d'abord, ne peut pas inclure listez si ce n'est pas dans le GROUP BY, et deuxièmement, si vous changez simplement le GROUP BY en "username", alors les 3 dernières lignes de vos données seront toutes combinées ensemble). –

Répondre

2

Utilisation:

SELECT COUNT(*) 
    FROM (SELECT o.username, 
       COUNT(o.userid) AS cnt 
      FROM ORDERS o 
     GROUP BY o.userid 
     HAVING cnt = ?) x 

Remplacer "?" avec le nombre que vous voulez voir le nombre d'utilisateurs avec cette valeur de comptage.

+0

même chose que je reçois Code d'erreur: 1248 Chaque table dérivée doit avoir son propre alias –

+1

@William Smith: Correction, oublié d'ajouter l'alias de la table (le "x"). –

+0

Merci pour votre aide très appréciée –

3

Je pense que vous pouvez simplement ajouter quelque chose comme ceci autour de votre requête:

SELECT InnerCount, COUNT(*) 
FROM 
(
    -- your query 
    SELECT username, count(userid) AS InnerCount 
    FROM orders 
    GROUP BY userid 
) t1 
GROUP BY InnerCount 

(caveat: n'ont pas touché mysql en années)

+0

je reçois cette erreur Code d'erreur: 1248 Chaque table dérivée doit avoir son propre alias –

+0

Je l'ai édité pour ajouter l'alias "t1" après la parenthèse droite après qu'il a échoué pour moi aussi. –

+0

LOL merci cela a fonctionné comme un charme! –