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
Libérer: 2025-01-08 07:04:39
original
377 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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.

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;
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal