Em 6 de agosto de 2016 16:13, Tiago José Adami <[email protected]> escreveu:
> Em 5 de agosto de 2016 16:51, Edson F. Lidorio <[email protected]>
> escreveu:
>> Opa!
>> Quase isso, Preciso considerar:
>>
>> - todos os produtos
>
> Não ficou claro, mas acredito que você deseje incluir todos os
> produtos da tabela produto mesmo que não haja registros na tabela
> historico_vendas, correto? Isto pode ser resolvido com um LEFT/RIGHT
> OUTER JOIN. Veja o exemplo do SQL abaixo.
>
>> - e também fazer a média por 1 ano dos produtos que tem menos de 1 ano
>
> Você especificou no post original que deseja uma média de 1 ano. O SQL
> abaixo irá trazer *todos* os produtos, de 1 ano atrás até a data
> atual. A média será pelo período inteiro (1 ano = 12 meses = 365 ou
> 366 dias se for ano bissexto). Com este código SQL abaixo você terá a
> média do último ano de todos os produtos, independente de quando foram
> cadastrados.
>
>
> SELECT
> pr.id_produto,
> pr.nome_produto,
> AVG(COALESCE(hv.qtde_produto,0)) as qtde_produto_media
> FROM
> produtos pr
> LEFT OUTER JOIN
> historico_vendas hv ON
> pr.id_produto = hv.id_produto
> WHERE
> hv.data_venda >= CURRENT_DATE - INTERVAL '1 YEAR'
> GROUP BY
> pr.id_produto,
> pr.nome_produto
Depois do envio do e-mail que eu me liguei que faltou fazer uma
pergunta: Você deseja a média diária, mensal, semanal ou qual período
dentro do ano? De uma forma grosseira, se você deseja a média mensal
dentro do ano, o SQL seria mais ou menos assim:
SELECT
pr.id_produto,
pr.nome_produto,
SUM(COALESCE(hv.qtde_produto,0))/12 as qtde_produto_media_mensal
FROM
produtos pr
LEFT OUTER JOIN
historico_vendas hv ON
pr.id_produto = hv.id_produto
WHERE
hv.data_venda >= CURRENT_DATE - INTERVAL '1 YEAR'
GROUP BY
pr.id_produto,
pr.nome_produto
TIAGO J. ADAMI
http://www.adamiworks.com
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral