Olaa boa noite,
Eu preciso montar uma query que emita um relatório pra apresentar o total de vendas de cada loja em um período, agrupados por cartão de crédito.
as tabelas seriam mais ou menos assim:
Tabela SALE (id, date, value, credit_card, store_id)
Tabela credit_card (id, name)
Tabela store(id, name)
Eu fiz uma query mas ele nao esta me mostrando o período corretamente:
SELECT c.name, b.name, a.value FROM sale
as a INNER JOIN credit_card
as b on a.id = b.id INNER JOIN
store as c on a.id = c.id WHERE a.date = ? GROUP by b.id;
Alguem sabe o que poderia ser?
Quando se usa período em sql, você tem duas opções:
Usar maior/igual e menor/igual…
...WHERE a.date >= data1 and a.date <= data2 ...
Ou usando between
...WHERE a.date between data1 and data2 ...
E para o total de venda por agrupamento, você precisa usar a função SUM…
SELECT c.name, b.name, SUM(a.value) ...
Outro ponto, quando se usa agrupamento (group by), todos os campos que não estão em funções de agrupamento (SUM/AVG/COUNT/MIN/MAX, etc) devem ser relacionadas, no seu caso não basta só chamar b.id…
GROUP BY c.name, b.name, b.id
Percebeu que não relacionei o a.value? Isso porque já está no agrupamento pela função SUM… espero ter ajudado
Opa…
Agora foi hehe ficou assim:
SELECT c.name, b.name, SUM(a.value) from sale as a inner join
credit_card as b on a.id = b.id inner join
store as c on a.id = c.id WHERE
a.date between data1 and data2
GROUP by c.name, b.name, b.id;
Muito obrigado Rodevops =)