2011-07-15 3 views
0

j'ai une table qui a les colonnes suivantes:ce qui est le meilleur SQL pour ce scénario

Team 
Region 
Person 
Name 

et je veux un rapport SQL pour produire une ligne pour chaque équipe/région (groupby équipe, Région) combinaison et aussi me montrer une colonne du nombre total de personnes qui existent pour cette équipe et cette région. Une suggestion a été d'avoir une colonne avec une valeur de 1 pour faire une somme sur ces colonnes, mais il doit y avoir une solution plus simple. Comment puis-je faire un compte sur les gens dans cette sortie?

Répondre

1
select 
    Team, 
    Region, 
    count(distinct Person) 
from mytable 
group by 1,2 
+0

Personnellement, je préfère nommer mon groupe-bys (donc «groupe par équipe, région» au lieu de «1, 2»). – AllenG

0
select Team, 
     Region, 
     count(*) as PersonCount 
from YourTable 
group by Team, Region 
0
SELECT Team, Region, COUNT(*) 
    FROM Table 
    GROUP BY Team, Region 

devrait fonctionner très bien, à moins que je me manque quelque chose.

0
select Team, Region, Count(Team) as PeopleCount 
from YourTable 
group by Team, Region 

devrait le faire. Notez que certains peuvent suggérer Count (tous). Ne vous habituez pas à utiliser Count (tous) IMO est une mauvaise pratique. Si vous avez une colonne d'index dans votre table, utilisez toujours cela dans Count(), le cas échéant. Ensuite, votre requête sera beaucoup plus rapide car il y a une possibilité que, selon la façon dont les index sont créés, votre requête peut finir par utiliser l'index uniquement et ne pas toucher la table.

Questions connexes