Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwenden eines Joins mit gruppierten Datenzeilen

Das Problem ist, dass wenn Sie GROUP BY verwenden , können Sie nur SELECT Aggregate und die Spalten, nach denen Sie gruppiert haben.

invoices.id ist eine Spalte, die Sie auswählen, aber nicht gruppieren wollten. Ich denke, Sie möchten diese Spalte wahrscheinlich zu GROUP BY hinzufügen Klausel.

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

Für die Beispieltabellen, die Sie gegeben haben, wird es wahrscheinlich geben:

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

Aber im Allgemeinen haben Sie etwas wie:

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

Wie Sie oben sehen können, wurden für Rechnung 1 150 in bar und 300 per Karte bezahlt.