J'essaie de retourner le% d'une valeur d'un enregistrement dans un champ, où le champ est créé à l'aide de groupe par et comptez comme ceci:
SELECT col_1, COUNT(col_2) / SUM(col_2) FROM table_name GROUP BY col_1 ORDER BY 2;
3 Réponses :
Il suffit d'utiliser une fonction de fenêtre: Remarque: j'ai ajouté le * 1.0 code>. Vous ne spécifiez pas la base de données que vous utilisez et certaines DIVISION INTEGER (donc
1/2 code> est
0 code> plutôt que
0.5 code>). p> p>
Vous pouvez toujours faire:
SELECT col_1, 1.0 * COUNT(col_2) / (select sum(col_2) from table_name) FROM table_name GROUP BY col_1 ORDER BY 2;
Re-bonjour. Je viens d'essayer de votre méthode et, alors que j'ai pu récupérer des décimales (j'ai déjà eu des erreurs), il n'y a pas les bonnes. Je le sais car le nombre net le plus élevé n'est pas le pourcentage le plus élevé renvoyé à l'aide de votre méthode. Pourquoi cela pourrait-il être?
Peut-être que des cas spéciaux dans les données ne sont pas présentés dans l'exemple?
Le problème est que dans SQL, lorsque vous souhaitez compter le total, sa fonction globale et les lignes individuelles seront "perdues".
Un moyen est d'utiliser "la fonction de fenêtre" si vous êtes sur MS SQL plus récent Versions. P>
Une autre solution construit le total comme une autre table (exemple ci-dessous TOTALTable), puis cross s'appliquer pour rejoindre la table d'origine avec cette nouvelle table. Ensuite, vous utilisez la colonne "Total". Quelque chose comme ci-dessous. P>