2010-10-22 6 views
0

Disons que j'ai un système de gestionnaire de contacts. Des notes sont associées à chaque contact établi par les employés.Requête SQL: Pour chaque valeur, déterminez le pourcentage de lignes contenant la valeur?

Alors, voici mon exemple rapide:

ContactName, NoteCount 
John, 100 
Rob, 10 
Amy, 10 
Chris, 10 

Comment puis-je déterminer la que 75% des contacts ont 10 notes assoicated avec eux et que 25% des contacts ont 100 notes qui leur sont associés?

Veuillez expliquer ce que j'essaie de faire en termes de Layman.

Répondre

4

Si vous voulez vraiment le pourcentage de personnes qui ont le nombre exact, utilisez ceci:

SELECT 
    NoteCount, 
    COUNT(*) ContactsWithThisNoteCount, 
    COUNT(*)/(SELECT COUNT(*) FROM Contacts) PercentageContactsWithThisNoteCount 
FROM 
    Contacts 
GROUP BY 
    NoteCount 

Si vous voulez grouings comme "0-9", "10-99" et "100+" alors vous avez juste besoin d'un peu de calcul dans le groupe par et MIN/MAXon NoteCount.

1
select 
((countTen/countTotal)*100) as percentTen, 
((countHundred/countTotal)*100) as percentHundred 
FROM (
    select 
    cast(sum(case when noteCount <= 10 then 1 else 0 end) as float) as countTen, 
    cast(sum(case when noteCount <= 100 and > 10 then 1 else 0 end) as float) as countHundred, 
    cast(count(*) as float) as countTotal 
    from 
    contacts 
) temp 

Devrait être ok, j'utilise souvent la somme trick + cas quand je dois faire un compte sur un filtre

Questions connexes