Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Usando uma junção com linhas de dados agrupadas


O problema é que quando você usa GROUP BY , você só pode SELECT agregados e as colunas em que você agrupou.

invoices.id é uma coluna que você tentou selecionar, mas não agrupou. Acho que você provavelmente deseja adicionar esta coluna ao GROUP BY cláusula.
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

Para as tabelas de exemplo que você deu, provavelmente 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

Mas, em geral, você terá algo como:
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

Onde você pode ver acima, para a fatura 1, 150 foram pagos em dinheiro e 300 foram pagos com cartão.