Maison >base de données >tutoriel mysql >Comment puis-je calculer efficacement les pourcentages d'un COUNT() dans une seule instruction SQL SELECT ?
Calcul des pourcentages à partir de SUM() dans la même instruction SELECT en SQL
Dans le contexte de la table my_obj avec les champs entiers value_a et value_b , il est possible de calculer le pourcentage de lignes où value_a est égal à value_b. La requête initiale a tenté d'y parvenir à l'aide d'une procédure stockée, mais a rencontré une erreur.
Solution simplifiée et plus efficace
Une approche plus simple et plus rapide est la suivante :
SELECT property_name ,(count(value_a = value_b OR NULL) * 100) / count(*) AS pct FROM my_obj GROUP BY 1;
Cette requête :
Gestion des valeurs NULL
Cette solution gère les valeurs NULL de manière appropriée, contrairement à la requête d'origine qui pourrait conduire à des résultats incorrects ou à des erreurs de division par zéro .
Préserver les chiffres décimaux
Pour préserver chiffres décimaux dans le résultat, modifiez la requête comme suit :
SELECT property_name ,round((count(value_a = value_b OR NULL) * 100.0) / count(*), 2) AS pct FROM my_obj GROUP BY 1;
Cette modification multiplie le numérateur par 100,0 pour forcer la précision numérique puis utilise round() pour spécifier le nombre de chiffres décimaux à conserver.
Conclusion
En employant la requête simplifiée ou la requête modifiée avec préservation décimale, on peut calculer efficacement les pourcentages de SUM() dans la même instruction SELECT, en gérant les valeurs NULL de manière appropriée.
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!