Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utilisation d'une jointure avec des lignes de données groupées

Le problème est que lorsque vous utilisez GROUP BY , vous ne pouvez que SELECT les agrégats et les colonnes sur lesquelles vous avez regroupé.

invoices.id est une colonne que vous avez essayé de sélectionner, mais que vous n'avez pas groupée. Je pense que vous voulez probablement ajouter cette colonne au GROUP BY clause.

SELECT 
   invoices.id, 
   sum(grossTotal)-IFNULL(depositsCheck.previouslyPaid,0) as todayTotal, 
   depositsCheck.previouslyPaid, sum(grossTotal) as grossTotal  
FROM `invoices`    
    LEFT JOIN (SELECT SUM(amount) as previouslyPaid, invNo 
    FROM deposits 
    GROUP BY invNo) depositsCheck ON depositsCheck.invNo=invoices.id 
GROUP BY  invoices.paymentType, invoices.id ORDER BY id DESC

Pour les exemples de tableaux que vous avez donnés, cela donnera probablement :

id    |    paymentType     |     grossTotal   |    dateTime   |   previouslyPaid
1     |         Cash       |        1000      |   UNIX TIME   |       150
2     |         Card       |        1350      |   UNIX TIME   |       350
3     |         Card       |        1250      |   UNIX TIME   |         0
4     |         Card       |        750       |   UNIX TIME   |         0

Mais en général, vous aurez quelque chose comme :

id    |    paymentType     |     grossTotal   |    dateTime   |   previouslyPaid
1     |         Cash       |        1000      |   UNIX TIME   |       150
1     |         Card       |        1000      |   UNIX TIME   |       300
2     |         Cash       |        1350      |   UNIX TIME   |       350
2     |         Card       |        1350      |   UNIX TIME   |       350

Là où vous pouvez voir ci-dessus, pour la facture 1, 150 ont été payés en espèces et 300 ont été payés par carte.