Maison > base de données > tutoriel mysql > Comment puis-je calculer efficacement des pourcentages à l'aide de SUM() dans une seule requête PostgreSQL ?

Comment puis-je calculer efficacement des pourcentages à l'aide de SUM() dans une seule requête PostgreSQL ?

Linda Hamilton
Libérer: 2025-01-01 01:08:09
original
291 Les gens l'ont consulté

How Can I Efficiently Calculate Percentages Using SUM() in a Single PostgreSQL Query?

Calcul des pourcentages à partir de SUM() dans une requête SQL unique

Dans PostgreSQL, vous pouvez rencontrer une erreur lorsque vous tentez de calculer des pourcentages à l'aide de SUM () dans la même requête SQL. Le problème survient lorsque vous essayez d'accéder à une colonne qui n'existe pas encore, comme nb_ok dans votre exemple.

Solution optimisée

Une approche plus efficace et plus précise pour calculer des pourcentages, il faut utiliser la requête suivante :

SELECT property_name,
       (count(value_a = value_b OR NULL) * 100) / count(*) AS pct
FROM   my_obj
GROUP  BY 1;
Copier après la connexion

Cette requête prend ce qui suit étapes :

  1. Compte le nombre de lignes où value_a est égal à value_b, quelles que soient les valeurs NULL, en utilisant count(value_a = value_b OR NULL).
  2. Divise le résultat par le nombre total de lignes du tableau en utilisant count(*).
  3. Multiplie le résultat par 100 pour exprimer le rapport sous forme de pourcentage.

Gestion des valeurs NULL

L'utilisation de OR NULL dans l'expression count() garantit que les valeurs NULL ne sont pas comptées. Ceci est important si votre tableau contient des valeurs NULL, car cela évite des résultats incorrects ou des erreurs de division par zéro.

Forcer les chiffres fractionnaires

Pour conserver les chiffres fractionnaires dans le résultat, vous pouvez utiliser 100,0 au lieu de 100, ce qui entraîne un calcul numérique qui évite troncature :

SELECT property_name,
       round((count(value_a = value_b OR NULL) * 100.0) / count(*), 2) AS pct
FROM   my_obj
GROUP  BY 1;
Copier après la connexion

Éviter les identifiants insensibles à la casse

Lors de l'utilisation de PostgreSQL, il est recommandé d'éviter les identifiants à casse mixte non cités, tels que valueA. Utilisez plutôt des identifiants minuscules pour éviter les erreurs potentielles et la confusion.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal