2013-08-05 3 views
2

Je suis à la recherche d'une solution à ce qui suit:Comment Somme multiple Colonne avec valeur multiple

  1. Aller à la table des utilisateurs et trouver un utilisateur qui a dressé la liste des articles sur le site. Dans cette table d'utilisateurs, il n'y a pas de colonne sur les enchères. Au lieu de cela, il est connecté à une table de comptes avec une clé (dans les comptes, cette colonne est appelée utilisateur)

  2. De ces IDs (utilisateurs qui ont listé des articles pour la vente aux enchères), j'ai besoin de trouver le solde de leur compte. C'est aussi dans la table des comptes. Le solde est contenu dans une colonne appelée operation_amount. J'ai aussi une autre colonne appelée operation_type qui décrit si un utilisateur a un solde positif ou négatif. Par exemple, si operation_type = 1, il a un solde négatif, alors que si operation_type = 2, il a un solde positif.

Maintenant, j'ai une autre table appelée tmpinvoice où il y a une colonne appelée quantité. Cela montre combien de frais un utilisateur doit payer aux administrateurs du site. Compte tenu de cela, j'ai besoin de calculer combien il doit payer au total. Par exemple, si un utilisateur a un solde de 200 $, je dois vérifier s'il est négatif ou positif sur la base du operation_type.

J'ai donc demande où est-ce que ce dossier est

SELECT u.id AS id_user, u.nick, 
    CASE ac.operation_type WHEN 1 THEN ac.operation_amount - tm.amount 
         WHEN 2 THEN ac.operation_amount + tm.amount 
           ELSE 'N/A' END AS `fee`       
FROM auctionbg_search.accounts AS ac  
    LEFT JOIN auctionbg_search.users AS u ON TRUE 
     AND u.id = ac.user 
    LEFT JOIN auctionbg_search.auctions AS a ON TRUE 
     AND a.id = ac.auction 
    LEFT JOIN auctionbg_search.tmpinvoice AS tm ON TRUE  
WHERE TRUE 
    AND tm.amount = ac.operation_amount 

Voici ce résultat que je reçois

http://gyazo.com/3d7e7f52ee14d21cc8c8d33b6bbc479a

Oui, mais ce calcul « taxe » seulement pour 1 valeur colonne, si l'utilisateur a plusieurs valeurs

comme cet utilisateur:

http://gyazo.com/c3bdb29fa235044ab888dc0385bbcdbd

Je dois calculer montant total de operation_amount de cet utilisateur donné et retirer tmpinvoice de ce montant total,

Un de mes amis m'a dit d'utiliser

IF(SUM(ac.operation_amount), IS NULL , 0, sum(ac.operation_amount) 

et à se joindre à 2 temps comptes (table) pour les deux cas avec + et -

joindre 1 fois pour +, 2 fois pour -

mais je n'arrive pas à comprendre à quoi ressemblera :)

+0

Quel système base de données que vous utilisez? –

+0

MySQL 5 pourquoi demandez-vous? – ameldur

Répondre

2

Utilisez l'expression CASE dans la fonction SUM.

SELECT u.id AS id_user, u.nick, 
    SUM(CASE ac.operation_type WHEN 1 THEN ac.operation_amount - tm.amount У 
           WHEN 2 THEN ac.operation_amount + tm.amount 
             ELSE 'N/A' END) AS `fee` 
    FROM auctionbg_search.accounts AS ac 
     LEFT JOIN auctionbg_search.users AS u ON TRUE AND u.id = ac.user 
     LEFT JOIN auctionbg_search.auctions AS a ON TRUE AND a.id = ac.auction 
     LEFT JOIN auctionbg_search.tmpinvoice AS tm ON TRUE 
    WHERE TRUE AND tm.amount = ac.operation_amount 
    GROUP BY u.id, u.nick  

Voir la démo sur SQLFiddle

+0

Cela permettrait de calculer la valeur totale de la colonne en 1, j'ai besoin de calculer pour chaque utilisateur leur solde et non le montant total dans operation_amount – ameldur

+0

Ok. Dans ce cas, utilisez la clause GROUP BY. La réponse est mise à jour –

+0

il donne des résultats irréels voici le résultat exemple utilisateur 37 http: // gyazo.com/0bcf64d53d61dc2cb4a615d25ec3d4c8 montrent des frais calculés 232 permettent de voir ce que l'utilisateur a dans operation_amount http://gyazo.com/96fbb0298f47671e38d7d6f9c40476a2 11,6 avec + laisse ainsi vérifier tmpinvoice http://gyazo.com/0add00022a640ceb0dd864847d6584d9 aucun enregistrement tmpinvoice donc de où 232 est venu alors? – ameldur