2011-04-25 6 views
1

J'utilise la requête suivante pour obtenir des résultats corrects pour chaque lot. Par exemple, si je veux à voir le total de la facture pour le lot 2010 ...mysql jointure interne avec le groupe par

SELECT COALESCE(sum(i.amount),0) AS amount, 
    COALESCE(sum(i.discount),0) AS discount, 
    COALESCE(sum(i.amount) - sum(i.discount),0) AS netpay, 
    b.name AS batch 
FROM fm_batches b 
    INNER JOIN fm_invoices i 
    LEFT JOIN fm_students s ON i.student_id = s.id 
GROUP BY b.name 

Et ses sortir les résultats suivants ...

| amount | discount | netpay | batch | 
+--------+----------+----------+-------+ 
| 2500 | 500  | 2000  | 2011 | 
+--------+----------+----------+-------+ 
| 2500 | 500  | 2000  | 2010 | 
+--------+----------+----------+-------+ 
| 2500 | 500  | 2000  | 2009 | 
+--------+----------+----------+-------+ 
| 2500 | 500  | 2000  | 2008 | 
+--------+----------+----------+-------+ 

Je suis sûr que je suis en train de faire quelque chose faux dans ma requête car il donne les mauvais résultats. Il devrait retourner 0 si rien n'a été trouvé pour le lot 2010. merci.

+0

Quelle est votre relation entre les factures et les lots ... y a-t-il une colonne de lot sur la table des factures? – DRapp

+0

Il n'y a pas de clause ON pour les factures JOIN. Quelle est la relation entre les factures et les lots/abonnements? – Galz

+0

@DRapp non je n'ai pas la colonne par lot sur la table des factures mais j'ai dans la table des abonnés, donc les tables seraient les abonnés, les factures et les lots – seoppc

Répondre

2

Vous avez donc besoin quelque chose comme:

SELECT COALESCE(sum(i.amount),0) AS amount, 
    COALESCE(sum(i.discount),0) AS discount, 
    COALESCE(sum(i.amount)-sum(i.discount),0) AS netpay, 
    b.name AS batch 
FROM batches b 
LEFT JOIN subscribers s on s.bacth_id = b.id 
LEFT JOIN invoices i on i.subs_id = s.id 
GROUP BY b.name 

(deviner la relation entre les abonnés et lots).

+0

Je n'ai pas de table de commandes sur la table des factures, sa table sur les abonnés, donc le lot est lié aux abonnés et les abonnés sont liés aux factures. – seoppc

+0

@seoppc Voir ma dernière modification avec: 's.bacth_id = b.id' – Galz

+0

Je pense que cela fonctionnerait bien, je vais le tester et marquera cette réponse, merci pour l'aide. – seoppc

Questions connexes