2010-12-31 3 views
4

J'essaie de compter plusieurs tables jointes mais sans aucune chance, ce que je reçois est le même nombre pour chaque colonne (tUsers,tLists,tItems). Ma requête est:mysql multi count() dans une requête

select COUNT(users.*) as tUsers, 
     COUNT(lists.*) as tLists, 
     COUNT(items.*) as tItems, 
     companyName 
    from users as c 
    join lists as l 
    on c.userID = l.userID 
    join items as i 
    on c.userID = i.userID 
    group by companyID 

Le résultat que je veux obtenir est

--------------------------------------------- 
# | CompanyName | tUsers | tlists | tItems 
1 | RealCoName | 5 | 2 | 15 
--------------------------------------------- 

quelles modifications dois-je faire pour ma requête pour obtenir ces résultats?

Vive

Répondre

5

Essayez cette

SELECT u.userID, companyName, 
     Count(DISTINCT l.listid) as tLists, Count(DISTINCT i.items) as tItems 
FROM users u 
    LEFT JOIN lists l ON u.userID=l.userID 
    LEFT JOIN items i ON u.userID=i.userID 
GROUP BY u.companyID 
+0

Salut Shakti Singh, cette requête me donne les résultats que je voulais. Je viens d'ajouter "Count (DISTINCT u.userID) en tant que tUsers". Je ne connaissais pas l'existence de DISTINCT, merci pour cela. – afarazit

+2

Cela a fonctionné pour quelque chose sur lequel je travaille aussi. Ma seule question est la suivante: pourquoi la distinction est-elle nécessaire pour chaque colonne 'count'? – acedanger

3

Vous pouvez le faire en utilisant la sous requête

select (select count(*) from users where userID=YourUserID) tUsers, 
     (select count(*) from lists where userID=YourUserID) as tLists, 
     (select count(*) from items where userID=YourUserID) as tItems, 
     companyName 
    from company group by companyID 
+0

salut shankhan, je ne vais pas insérer "YourUserID" en utilisant une application, "YourUserID" vient des JOINs. Pouvez-vous s'il vous plaît modifier votre requête afin qu'elle le fasse? – afarazit

+0

hmm dans ce cas, vous devrez écrire rejoindre dans chaque sous-requête et il sera peu coûteux – shankhan