2012-09-26 1 views
-1

Je veux calculer le pourcentage de résultat dans SQL à partir de ces données pour chaque période.Résultat pourcentage par période dans SQL

Period Result 
1  Green 
1  Blue 
1  Blue 
1  Red 
1  Blue 
1  Blue 
1  Blue 
2  Green 
2  Green 
2  Green 
2  Blue 
2  Red 
2  Red 

Résultat attendu ..

Period Result Percentage 
1  Blue  72% 
1  Green 9% 
1  Red  9% 
2  Blue  17% 
2  Green 50% 
2  Red  33% 
+3

[Qu'avez-vous essayé?] (Http://whathaveyoutried.com) Quels SGBDR utilisez-vous? –

Répondre

2

COUNT par Period d'abord, rejoindre le résultat avec la table d'origine à nouveau, regroupés à la fois par Period et Result, puis juste faire une division pour obtenir le pourcentage:

SELECT t.Period, t.Result, ((COUNT(t.Result)/Cnt) * 100) Percentage 
FROM table t 
    INNER JOIN (SELECT Period, COUNT(*) Cnt 
       FROM table 
       GROUP BY Period) period_cnt 
    ON t.Period = period_cnt.Period 
GROUP BY t.Period, t.Result 

Vous devrez peut-être ajuster l'arrondi, et utiliser CONCAT pour ajouter le caractère % à votre sortie, mais cela devrait être assez facile.

En outre, votre moyenne pour la première période est erronée, elle devrait ajouter jusqu'à 100. Le vert et le rouge doivent avoir la valeur 14.

DEMO.

1

Quelque chose comme ceci (ANSI SQL):

select period, 
     result, 
     (count(result)/total_period) * 100 as result_percent 
from (
    select period, 
     result, 
     count(*) over (partition by period) as total_period 
    from periods 
) as t 
group by period, total_period, result 
order by period, result; 

Selon votre SGBD vous pourriez avoir besoin de jeter les valeurs entières à une décimale pour voir des fractions.

Démo: http://sqlfiddle.com/#!1/2ec4f/1