Mysql
 sql >> Database >  >> RDS >> Mysql

Utilizzo di un join con righe di dati raggruppate

Il problema è che quando usi GROUP BY , puoi solo SELECT aggregati e le colonne su cui hai raggruppato.

invoices.id è una colonna che hai provato a selezionare, ma non hai raggruppato. Penso che probabilmente vorrai aggiungere questa colonna a GROUP BY clausola.

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

Per le tabelle di esempio che hai fornito, probabilmente darà:

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

Ma in generale, avrai qualcosa come:

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

Dove puoi vedere sopra, per la fattura 1, 150 sono stati pagati in contanti e 300 sono stati pagati con carta.