2010-06-11 9 views
1

Supposons que j'ai données dans le tableau X:SQL pour obtenir des statistiques distinctes

id  assign team 
---------------------- 
1  hunkim A 
1  ygg  A 
2  hun  B 
2  gw  B 
2  david  B 
3  haha  A 

Je veux savoir combien de droit pour chacun id. Je peux obtenir l'aide:

id select, count (assign distinct) de groupe X par id ordre par comptage (assign distinct) desc;

Il me donnera quelque chose:

1 2 
2 3 
3 1 

Ma question est de savoir comment puis-je obtenir la moyenne de tous les assigner compte?

En outre, maintenant je veux connaître le nombre de personnes par équipe. Donc, je veux quelque chose comme:

team assign_avg 
------------------- 
A   1.5 
B   3 

Merci d'avance!

+0

Pouvez-vous expliquer pourquoi A devrait être 1.5 et B 3? Je ne peux pas vraiment voir ce que vous faites. –

+0

Quelle base de données est "mssqlft"? –

Répondre

1
SELECT 
    AVG(CAST(assign_count AS DECIMAL(10, 4))) 
FROM 
    (SELECT 
     id, 
     COUNT(DISTINCT assign) AS assign_count 
    FROM 
     X 
    GROUP BY 
     id) Assign_Counts 

.

SELECT 
    team, 
    AVG(CAST(assign_count AS DECIMAL(10, 4))) 
FROM 
    (SELECT 
     id, 
     team, 
     COUNT(DISTINCT assign) AS assign_count 
    FROM 
     X 
    GROUP BY 
     id, 
     team) Assign_Counts 
GROUP BY 
    Team 
+0

Cela fonctionne bien. Comment puis-je obtenir l'AVG en flottant? Cela me donne juste des valeurs int. –

+0

Vous avez juste besoin de CAST la colonne count (vous pouvez soit le faire dans la sous-requête ou comme je l'ai fait dans la requête externe ci-dessus). –

1

Qu'est-ce que vous voulez peut être fait dans une requête, en utilisant des fonctions d'agrégation COUNT et AVG:

SELECT t.id, 
     COUNT(*) AS num_instances, 
     AVG(t.id) AS assign_avg 
    FROM TABLE t 
GROUP BY t.id 

Les colonnes qui ne disposent pas d'une fonction d'agrégation réalisée sur eux doivent être définis dans le GROUP BY clause.

+0

Vous ne pouvez pas faire fonctionner AVG (*). Vous devez avoir une expression numérique là-dedans. –

+0

@Tom H: Corrigé, merci. –

Questions connexes