Maison >base de données >tutoriel mysql >Comment puis-je calculer efficacement les pourcentages d'un COUNT() dans une seule instruction SQL SELECT ?

Comment puis-je calculer efficacement les pourcentages d'un COUNT() dans une seule instruction SQL SELECT ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-03 20:15:40391parcourir

How Can I Efficiently Calculate Percentages from a COUNT() in a Single SQL SELECT Statement?

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 :

  • Calcule le numérateur du pourcentage en comptant les nombre de lignes où value_a est égal à value_b en utilisant l'expression count(value_a = value_b OR NULL). Le OR NULL garantit que les valeurs NULL sont traitées comme FALSE dans la comparaison d'égalité.
  • Calcule le dénominateur du pourcentage à l'aide de count(*), qui compte toutes les lignes, y compris celles avec des valeurs NULL.
  • Divise le numérateur par le dénominateur pour obtenir le pourcentage et l'attribue à l'alias pct.

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!

Déclaration:
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