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;
Cette requête prend ce qui suit étapes :
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;
É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!