0
votes

Calculer les pourcentages dans SQL

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;


0 commentaires

3 Réponses :


0
votes

Il suffit d'utiliser une fonction de fenêtre: xxx

Remarque: j'ai ajouté le * 1.0 . Vous ne spécifiez pas la base de données que vous utilisez et certaines DIVISION INTEGER (donc 1/2 est 0 plutôt que 0.5 ).


0 commentaires

0
votes

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;


2 commentaires

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?



0
votes

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.

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. xxx


0 commentaires