Criar uma query de consultar gerando uma Media mensal sem considerar os meses que nao tem valor

SQL Server

SQL

MySQL

Oracle

Banco de Dados

25/05/2018

Bom galera basicamente eu gostaria de pegar a movimentação de vendas dos ultimos 12 meses de uma empresa que presto serviço, e fazer uma media de venda de cada produto somente dos meses que existir venda, não posso pegar simplesmente e fazer SUM(qtde_vendida)/12, por que dessa forma, todo produto novo em estoque quebrara o resultando trazendo uma media que não é verdadeira
se alguem tiver alguma ideia de como faço isso eu agradeceria a ajuda
Phellipe Rodrigues

Phellipe Rodrigues

Curtidas 0

Melhor post

Leandro Chiodini

Leandro Chiodini

25/05/2018

Bom dia.
Você pode ir nesta linha de raciocínio..

select
	avg(sel.total) as media    
from(select
	count(distinct(month(dt_pg))) as meses,
    month(dt_pg),
	sum(Valor) as total
from
	teste
group by
	year(dt_pg), month(dt_pg)) as sel


[]´s

GOSTEI 2

Mais Respostas

Leandro Chiodini

Leandro Chiodini

25/05/2018

pode ser somente

select
	avg(sel.total) as media    
from(select
	sum(Valor) as total
from
	teste
group by
	year(dt_pg), month(dt_pg)) as sel
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

25/05/2018

tente assim:

select
   p.produto,
   sum(v.qtde_vendida) total,
   count(distinct month(v.data_venda)) num_meses_venda,
   sum(v.qtde_vendida) / count(distinct month(v.data_venda)) qtde_media_mes
from produtos p
inner join vendas v on v.produto = p.produto
group by p.produto
order by p.produto

GOSTEI 1
Phellipe Rodrigues

Phellipe Rodrigues

25/05/2018

Amigo eu compreendi como faz, mas da uma olhada na minha query, eu nao consegui ver como encaixar nela, se puder me ajudar ficarei grato

select  pd.codigo+'-'+p.descricao as produto,  
media.media,  
sum(pd.qtde_vol)as  qtdeVendida,  
cast(p.est_atual/p.qtdeporcaixa as numeric(15,2))as  estoque,  
cast((p.est_atual/p.qtdeporcaixa) - sum(pd.qtde_vol)as numeric(15,2))  as pedidoVenda,  
cast((p.est_atual/p.qtdeporcaixa)-media.media-sum(pd.qtde_vol)as numeric(15,2)) as pedidoMedia  
from PEDIDOS.dbo.pedidos_det pd  inner join PEDIDOS.dbo.pedidos_cab pc on pc.numero = pd.numero  
inner join ESTOQUE.dbo.Produtos p on  p.codigo = pd.codigo 
 inner join (select pd.codigo, SUM(pd.qtde_vol)/6 media from PEDIDOS.dbo.pedidos_det pd inner join PEDIDOS.dbo.pedidos_cab pc on pc.numero = pd.numero where pc.dt_emissao >= '2017-25-11' and pc.dt_emissao <= '2018-25-05' and pc.status = 2 group by pd.codigo)as media on media.codigo = pd.codigo  
 where pc.dt_emissao >='2018-01-05' and pc.dt_emissao <= '2018-25-05'  and pc.status <> 2 and pc.status <> 3  and p.grupo = 1  group by pd.codigo,p.descricao,p.est_atual,media.media,p.qtdeporcaixa order by produto 
GOSTEI 0
Phellipe Rodrigues

Phellipe Rodrigues

25/05/2018

tente assim:

select
   p.produto,
   sum(v.qtde_vendida) total,
   count(distinct month(v.data_venda)) num_meses_venda,
   sum(v.qtde_vendida) / count(distinct month(v.data_venda)) qtde_media_mes
from produtos p
inner join vendas v on v.produto = p.produto
group by p.produto
order by p.produto



Amigo eu compreendi como faz, mas da uma olhada na minha query, eu nao consegui ver como encaixar nela, se puder me ajudar ficarei grato
select  pd.codigo+'-'+p.descricao as produto,  
media.media,  
sum(pd.qtde_vol)as  qtdeVendida,  
cast(p.est_atual/p.qtdeporcaixa as numeric(15,2))as  estoque,  
cast((p.est_atual/p.qtdeporcaixa) - sum(pd.qtde_vol)as numeric(15,2))  as pedidoVenda,  
cast((p.est_atual/p.qtdeporcaixa)-media.media-sum(pd.qtde_vol)as numeric(15,2)) as pedidoMedia  
from PEDIDOS.dbo.pedidos_det pd  
inner join PEDIDOS.dbo.pedidos_cab pc on pc.numero = pd.numero  
inner join ESTOQUE.dbo.Produtos p on  p.codigo = pd.codigo 
inner join (select pd.codigo, SUM(pd.qtde_vol)/6 media 
                   from PEDIDOS.dbo.pedidos_det pd 
                   inner join PEDIDOS.dbo.pedidos_cab pc on pc.numero = pd.numero 
                   where pc.dt_emissao >= '2017-25-11' 
                    and pc.dt_emissao <= '2018-25-05' 
                    and pc.status = 2 
                    group by pd.codigo)as media on media.codigo = pd.codigo  
where pc.dt_emissao >='2018-01-05' 
and pc.dt_emissao <= '2018-25-05'  
and pc.status <> 2 
and pc.status <> 3  
and p.grupo = 1  
group by pd.codigo,p.descricao,p.est_atual,media.media,p.qtdeporcaixa
order by produto 
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

25/05/2018

select
  pd.codigo+'-'+p.descricao as produto,
  sum(pd.qtde_vol) as qtdeVendida,
  cast(p.est_atual/p.qtdeporcaixa as numeric(15,2)) as estoque,  
  cast((p.est_atual/p.qtdeporcaixa) - sum(pd.qtde_vol) as numeric(15,2)) as pedidoVenda, -- não entendi
  sum(pd.qtde_vol) / count(distinct month(pc.dt_emissao)) media -- calcula a média
--  cast((p.est_atual/p.qtdeporcaixa) - media.media-sum(pd.qtde_vol)as numeric(15,2)) as pedidoMedia -- não entendi
from
  PEDIDOS.dbo.pedidos_det pd
inner join
  PEDIDOS.dbo.pedidos_cab pc on pc.numero = pd.numero
inner join
  ESTOQUE.dbo.Produtos p on p.codigo = pd.codigo
where
  pc.dt_emissao between '2018-01-05' and '2018-25-05'
  and pc.status <> 2
  and pc.status <> 3
  and p.grupo = 1
group by
  pd.codigo,p.descricao,p.est_atual,p.qtdeporcaixa
order by
  produto
GOSTEI 1
Phellipe Rodrigues

Phellipe Rodrigues

25/05/2018

select
  pd.codigo+'-'+p.descricao as produto,
  sum(pd.qtde_vol) as qtdeVendida,
  cast(p.est_atual/p.qtdeporcaixa as numeric(15,2)) as estoque,  
  cast((p.est_atual/p.qtdeporcaixa) - sum(pd.qtde_vol) as numeric(15,2)) as pedidoVenda, -- não entendi
  sum(pd.qtde_vol) / count(distinct month(pc.dt_emissao)) media -- calcula a média
--  cast((p.est_atual/p.qtdeporcaixa) - media.media-sum(pd.qtde_vol)as numeric(15,2)) as pedidoMedia -- não entendi
from
  PEDIDOS.dbo.pedidos_det pd
inner join
  PEDIDOS.dbo.pedidos_cab pc on pc.numero = pd.numero
inner join
  ESTOQUE.dbo.Produtos p on p.codigo = pd.codigo
where
  pc.dt_emissao between '2018-01-05' and '2018-25-05'
  and pc.status <> 2
  and pc.status <> 3
  and p.grupo = 1
group by
  pd.codigo,p.descricao,p.est_atual,p.qtdeporcaixa
order by
  produto


Cara deu certinho, muito obrigado mesmo pela ajuda
GOSTEI 0
POSTAR