Maison  >  Questions et réponses  >  le corps du texte

Comment obtenir la somme correcte de deux colonnes en utilisant le cas où

Je développe un programme qui suivra les unités vendues par un vendeur, qui peuvent être soit une transaction complète (1), soit une demi-vente (0,5). Ce que je dois faire, c'est trouver un moyen d'obtenir la somme de toutes les transactions et la moitié des transactions regroupées par identifiant de vendeur.

Voici la structure de la base de données :

id salesperson_id salesperson_two_id Date de vente
1 5 vide 2022-07-02
2 3 5 2022-07-18
3 4 vide 2022-07-16
4 5 3 2022-07-12
5 3 5 2022-07-17
6 5 vide 2022-07-18

Si je souhaite récupérer uniquement la SOMME d'un commercial, j'ai une requête valide :

SELECT 
SUM(case when salesperson_id = 5 and isnull(salesperson_two_id) then 1 end) as fullDeals, 
SUM(case when salesperson_id != 5 and salesperson_two_id = 5 
or salesperson_id = 5 and salesperson_two_id != 5 then 0.5 end) as halfDeals 
FROM sold_logs WHERE MONTH(sold_date) = 07 AND YEAR(sold_date) = 2022;

Le résultat sera comme prévu :

Toutes les offres Demi-affaire
2 1.5

Ce que je veux accomplir, c'est obtenir ces résultats pour tous les vendeurs du tableau mais je ne sais pas comment y parvenir. Voici le résultat que je souhaite obtenir :

salesperson_id Total des transactions
5 3.5
3 1.5
4 1

J'aimerais que les résultats soient triés par nombre total de transactions si possible.

P粉103739566P粉103739566213 Il y a quelques jours401

répondre à tous(1)je répondrai

  • P粉590929392

    P粉5909293922024-03-20 15:56:49

    Utilisez UNION ALL pour obtenir un ensemble de résultats contenant toutes les lignes pour chaque vendeur, filtrez les mois souhaités et agrégez :

    SELECT salesperson_id,
           SUM(CASE WHEN salesperson_two_id IS NULL THEN 1 ELSE 0.5 END) totalDeals
    FROM (
      SELECT salesperson_id, salesperson_two_id, sold_date FROM sold_logs
      UNION ALL
      SELECT salesperson_two_id, salesperson_id, sold_date FROM sold_logs WHERE salesperson_two_id IS NOT NULL
    ) t
    WHERE MONTH(sold_date) = 7 AND YEAR(sold_date) = 2022
    GROUP BY salesperson_id
    ORDER BY totalDeals DESC;

    Voir Démo.

    répondre
    0
  • Annulerrépondre