sql >> Databasteknik >  >> RDS >> Mysql

Använda en Join med grupperade datarader

Problemet är att när du använder GROUP BY , du kan bara SELECT aggregat och kolumnerna du har grupperat på.

invoices.id är en kolumn du försökte välja men inte grupperade. Jag tror att du förmodligen vill lägga till den här kolumnen i GROUP BY klausul.

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 exempeltabellerna du gav kommer det förmodligen att ge:

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

Men i allmänhet kommer du att ha något som:

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

Där du kan se ovan, för faktura 1, betalades 150 kontant och 300 betalades med kort.




  1. Ta reda på vilket kvartal en dejt tillhör i Oracle

  2. hur kan jag ta bort databasen som jag är i den i mysql? utan att känna till namnet på databasen DROP DATABASE()

  3. Dra de första X orden (inte bara tecken) från mySQL

  4. SQL-injektioner i ADOdb och allmän webbplatssäkerhet