Interrogez efficacement plusieurs décomptes dans une seule instruction SQL
Dans la programmation de bases de données, il est souvent crucial de récupérer des données agrégées telles que des décomptes, des moyennes et des sommes. Lorsque plusieurs types de décomptes sont requis pour une seule requête, cela peut être réalisé en utilisant une combinaison d’agrégation conditionnelle et de regroupement.
Considérez la requête suivante :
<code class="language-sql">SELECT distributor_id, COUNT(*) AS TOTAL, COUNT(*) WHERE level = 'exec', COUNT(*) WHERE level = 'personal'</code>
Cette requête est conçue pour renvoyer les informations suivantes pour chaque distributeur :
Cependant, cette requête entraînera plusieurs lignes de résultats, chaque groupe comptant une ligne. Pour éviter cela, nous devons structurer la requête de manière à renvoyer une seule ligne pour tous les décomptes requis.
Pour résoudre ce problème, nous pouvons utiliser l'instruction CASE en combinaison avec des fonctions d'agrégation (telles que COUNT). L'instruction CASE nous permet d'évaluer conditionnellement une expression et de renvoyer la valeur correspondante. Cela nous permet de compter les enregistrements en fonction de critères spécifiques dans une seule requête.
La requête modifiée suivante contient une instruction CASE :
<code class="language-sql">SELECT distributor_id, count(*) AS total, sum(case when level = 'exec' then 1 else 0 end) AS ExecCount, sum(case when level = 'personal' then 1 else 0 end) AS PersonalCount FROM yourtable GROUP BY distributor_id</code>
En utilisant l'instruction CASE, nous pouvons appliquer des conditions à une agrégation. La clause WHEN précise la condition, tandis que les clauses THEN et ELSE définissent les valeurs correspondantes à compter. La fonction SOMME additionne les valeurs renvoyées par chaque instruction conditionnelle.
Cette approche présente plusieurs avantages :
Cependant, il est important de prendre en compte l'impact sur les performances lors de l'utilisation de l'agrégation conditionnelle pour traiter de grands ensembles de données. Dans ce cas, vous devrez peut-être utiliser des index ou d'autres techniques pour optimiser la requête.
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!