Maison >base de données >tutoriel mysql >Comment puis-je effectuer une sommation conditionnelle dans les requêtes MSSQL GROUP BY ?

Comment puis-je effectuer une sommation conditionnelle dans les requêtes MSSQL GROUP BY ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-08 07:04:39330parcourir

How can I perform conditional summing in MSSQL GROUP BY queries?

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 :

  • La fonction

    COUNT() compte le nombre de lignes pour chaque OrderId.

  • La fonction

    SUM(), lorsqu'elle est utilisée avec l'expression CASE, effectue une sommation conditionnelle des valeurs de prix :

    • Si PriceType est 'CopyCost', les prix sont additionnés.
    • Si PriceType n'est pas « CopyCost » (c'est-à-dire « FullPrice »), la somme est supérieure à 0.
  • La clause

    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!

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