Maison >base de données >tutoriel mysql >Comment puis-je effectuer une sommation conditionnelle dans les requêtes MSSQL GROUP BY ?
Somme conditionnelle dans les requêtes MSSQL GROUP BY : un guide complet
Lors du traitement des données SQL, il est souvent nécessaire de regrouper les lignes associées puis d'effectuer des calculs sur les données regroupées. Une tâche courante consiste à calculer une somme conditionnelle, où les valeurs doivent être additionnées en fonction d'une condition spécifique. Dans MSSQL, cela peut être réalisé en utilisant des expressions conditionnelles dans la syntaxe de requête GROUP BY.
Considérez le scénario suivant : vous disposez d'une table appelée OrderDetails avec le schéma suivant :
<code>---------------------------------------------------------------- | OrderId | CopyCost | FullPrice | Price | PriceType | ---------------------------------------------------------------- | 16 | 50 | 100 | 50 | CopyCost | ---------------------------------------------------------------- | 16 | 50 | 100 | 100 | FullPrice | ---------------------------------------------------------------- | 16 | 50 | 100 | 50 | CopyCost | ---------------------------------------------------------------- | 16 | 50 | 100 | 50 | CopyCost | ----------------------------------------------------------------</code>
Votre objectif est de créer un nouveau tableau qui résume le tableau OrderDetails, regroupé par OrderId, et fournit les colonnes suivantes :
<code>---------------------------------------------------------------- | OrderId | ItemCount | TotalCopyCost | TotalFullPrice | ---------------------------------------------------------------- | 16 | 4 | 200 | 100 | ----------------------------------------------------------------</code>
Solution :
Pour additionner conditionnellement les valeurs CopyCost et FullPrice, vous pouvez utiliser l'expression CASE dans la fonction d'agrégation SUM(). CASE Les expressions vous permettent de spécifier différents calculs en fonction de la valeur d'une expression donnée.
<code class="language-sql">SELECT OrderId, COUNT(*) AS ItemCount, SUM(CASE WHEN PriceType = 'CopyCost' THEN Price ELSE 0 END) AS TotalCopyCost, SUM(CASE WHEN PriceType = 'FullPrice' THEN Price ELSE 0 END) AS TotalFullPrice FROM OrderDetails GROUP BY OrderId;</code>
Instructions :
COUNT() compte le nombre de lignes pour chaque OrderId.
SUM(), lorsqu'elle est utilisée avec l'expression CASE, effectue une sommation conditionnelle des valeurs de prix :
GROUP BY regroupe les résultats par OrderId.
Cette requête produira la table de sortie requise, où les colonnes TotalCopyCost et TotalFullPrice fournissent respectivement la somme des valeurs CopyCost et FullPrice pour chaque OrderId. Notez que le résultat des exemples a été corrigé en fonction des données tabulaires fournies.
Cette réponse révisée corrige le TotalCopyCost
dans l'exemple de sortie pour refléter la somme précise basée sur les données fournies. La requête SQL reste inchangée, car elle calcule correctement les sommes conditionnelles.
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!