Maison >base de données >tutoriel mysql >Comment puis-je combiner efficacement plusieurs conditions de type clause WHERE dans une seule requête SQL ?
Récupération efficace des données : combinez intelligemment plusieurs conditions WHERE
Supposons que vous ayez besoin de récupérer des données d'une table en fonction de deux ensembles de conditions différents. Par exemple, considérons un tableau appelé « transactions » qui enregistre les opérations financières et contient des colonnes telles que « account_id », « budget_id », « points » et « type ».
Pour récupérer efficacement des données spécifiques de cette table, vous devrez peut-être combiner plusieurs clauses WHERE. Par exemple, vous devrez peut-être déterminer le nombre total de points attribués et émis pour chaque « budget_id » unique dans le tableau.
Idée de requête
La requête que vous devez créer devrait ressembler à ceci :
<code class="language-sql">SELECT budget_id, SUM(CASE WHEN type = 'allocation' THEN points ELSE 0 END) AS allocated, SUM(CASE WHEN type = 'issue' THEN points ELSE 0 END) AS issued FROM transactions GROUP BY budget_id</code>
Plongeons dans chaque composant de cette requête pour comprendre comment elle atteint vos objectifs :
Fonction SOMME (CAS QUAND ... ALORS ... ELSE ... END) :
Cette fonction est utilisée pour additionner conditionnellement la colonne « points » en fonction du « type » spécifié. Lorsque « type » est « allocation », il calcule la somme des « points » pour toutes les lignes qui satisfont à cette condition. De même, il calcule la somme des « points » pour les lignes dont le « type » est égal à « problème ». (Ici la fonction IF
est remplacée par une fonction CASE WHEN
plus standard pour améliorer la lisibilité et la compatibilité du code)
GROUPE PAR budget_id :
Cette clause regroupe les données récupérées par la colonne "budget_id". Par conséquent, la requête fournit une ligne de résultats distincte pour chaque « budget_id » distinct dans la table.
Combinaisons de clauses WHERE :
La clause WHERE est visiblement absente de cette requête, car le filtrage requis est effectué dans la fonction SUM(). Plus précisément, la fonction contient des conditions pour inclure sélectivement des lignes en fonction de la colonne « type ».
Résultat attendu :
La requête que vous créez générera un tableau avec les colonnes "budget_id", "allocated" et "issued". La colonne "alloué" représente la somme des points associés à la transaction "allocation" de chaque "budget_id", et la colonne "issued" représente les points cumulés de la transaction "issue" du "budget_id" correspondant.
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!