sql >> Database >  >> RDS >> Mysql

Een join gebruiken met gegroepeerde gegevensrijen

Het probleem is dat wanneer u GROUP BY . gebruikt , u kunt alleen SELECT aggregaten en de kolommen waarop u hebt gegroepeerd.

invoices.id is een kolom die u probeerde te selecteren, maar niet groepeerde. Ik denk dat je deze kolom waarschijnlijk wilt toevoegen aan de GROUP BY clausule.

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

Voor de voorbeeldtabellen die je gaf, zal het waarschijnlijk het volgende geven:

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

Maar over het algemeen heb je zoiets als:

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

Zoals u hierboven kunt zien, is voor factuur 1, 150 contant betaald en 300 met kaart betaald.




  1. mysql-volgorde op rand() prestatieprobleem en oplossing

  2. Oracle Sequentietrigger maken

  3. Lighty Inkoopavontuur

  4. Wat is Oracle SQL &PL/SQL? Alles wat een beginner moet weten