Obtenir efficacement plusieurs décomptes avec une seule requête SQL
Les requêtes de base de données nécessitent souvent de récupérer plusieurs valeurs agrégées en fonction de différentes conditions. Bien que certaines approches puissent s'avérer inefficaces, une méthode concise utilise l'instruction CASE
avec des fonctions d'agrégation, imitant efficacement les capacités d'une fonction PIVOT dans les bases de données dépourvues de cette fonctionnalité.
Voici comment procéder :
Disons que vous avez besoin de décomptes classés par différentes valeurs dans une colonne. Par exemple, considérons un tableau de suivi des distributeurs et de leurs niveaux (« exécutif » ou « personnel »). La requête suivante calcule efficacement divers décomptes :
<code class="language-sql">SELECT distributor_id, COUNT(*) AS total_count, SUM(CASE WHEN level = 'exec' THEN 1 ELSE 0 END) AS exec_count, SUM(CASE WHEN level = 'personal' THEN 1 ELSE 0 END) AS personal_count FROM yourtable GROUP BY distributor_id;</code>
Cette requête effectue les opérations suivantes :
**: Calculates the total number of rows for each
distributor_id`.SUM(CASE WHEN level = 'exec' THEN 1 ELSE 0 END)
: compte les lignes où level
est « exec ». L'instruction CASE
attribue 1 si la condition est vraie, 0 sinon. SUM
totalise ensuite ces 1 et ces 0.SUM(CASE WHEN level = 'personal' THEN 1 ELSE 0 END)
: De même, compte les lignes où level
est « personnel ».GROUP BY distributor_id
: regroupe les résultats, en fournissant des décomptes séparés pour chaque distributeur.Cette requête unique renvoie efficacement le nombre total et les comptes séparés pour les niveaux « exécutif » et « personnel » pour chaque distributor_id
, le tout dans un seul ensemble de résultats. Cette approche est bien plus efficace que l'exécution de plusieurs requêtes distinctes.
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!