Boa tarde a todos. Estou usando o SGBD MySQL 5.7 e estou tendo dificuldade para montar uma consulta para a geração de um gráfico.
Eu estou retornando da minha tabela de pagamentos a soma dos valores, agrupados pela data, cuja forma de pagamento seja cartão de crédito por exemplo. Até aí tudo normal segue exemplos das consutas e os dados retornados:
SELECT data, SUM(valor)
FROM pagamentos
WHERE forma_pagamento = 'CREDITO'
GROUP BY data;
+---------------------+------------+
| data | SUM(valor) | #Retorno dos pagamentos no cartão de crédito.
+---------------------+------------+
| 2018-06-07 00:00:00 | 500.00 |
+---------------------+------------+
SELECT data, SUM(valor)
FROM pagamentos
WHERE forma_pagamento = 'DINHEIRO'
GROUP BY data;
+---------------------+------------+
| data | SUM(valor) | #Retorno dos pagamentos em dinheiro.
+---------------------+------------+
| 2018-05-02 00:00:00 | 480.00 |
| 2018-05-03 00:00:00 | 65.00 |
| 2018-06-07 00:00:00 | 100.00 |
+---------------------+------------+
O que eu preciso é que o resultado da primeira consulta seja este:
+---------------------+------------+
| data | SUM(valor) |
+---------------------+------------+
| 2018-05-02 00:00:00 | 0.00 |
| 2018-05-03 00:00:00 | 0.00 |
| 2018-06-07 00:00:00 | 500.00 |
+---------------------+------------+
Ou seja caso existam pagamentos com outra forma_pagamento (‘DINHEIRO’ por exemplo) em uma data que não tenha tido pagamento em cartao, que esta data seja retornada com o valor 0. (Nesta data houveram pagamentos mas como não foi em cartão retorna-se a data com o valor 0).
Segue a descrição da minha tabela caso necessário:
+----------------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+---------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| bandeira_cartao | varchar(255) | YES | | NULL | |
| data | datetime | YES | | NULL | |
| forma_pagamento | varchar(255) | YES | | NULL | |
| qtd_parcelas | int(11) | YES | | NULL | |
| valor | decimal(19,2) | YES | | NULL | |
| cliente_numero_ficha | int(11) | NO | MUL | NULL | |
| cliente_ortodontia | bit(1) | NO | | NULL | |
+----------------------+---------------+------+-----+---------+----------------+
Eu procurei bastante sobre como fazer isso mas não encontrei nada parecido. Agradeço a quem puder ajudar.