none
SELECT QUANTIDADE PRODUTOS PERIODO MEDIA MENSAL RRS feed

  • Pergunta

  • Bom dia a Todos,

    Agradeço a atenção, se alguem puder me ajudar

    preciso fazer uma select onde mostre meus produtos e a media mensal de quanntidade vendida,

    como proceder ?

    SELECT  MIN(PRO.DESCRICAO) DESCRICAO,
                 SUM(I.QUANTIDADE),

                 MEDIA = ?

    FROM PRODUTOS PRO

    JOIN ITENSPEDIDO I ON PRO.CODPRODUTO=I.CODPRODUTOO

    WHERE DATA >=DATAINI AND

                DATAFIM <= :DATAFIM

    GROUP BY I.CODPRODUTO

    OBRIGADO

                 

            

    quinta-feira, 28 de maio de 2015 11:44

Respostas

  • certamente que o join iria ser mais eficiente que a subquery, que por sua vez não é uma má prática. Eu precisaria de um cenário semelhante para testar a diferença e talvez modelar de uma forma diferente o que não é o meu caso agora...

    Mas o importante é que o cliente vai ter o relatório!

    Abraço!


    Natan

    quinta-feira, 28 de maio de 2015 17:19

Todas as Respostas

  • Use a função Average AVG

    SELECT  MIN(PRO.DESCRICAO) DESCRICAO,
                 SUM(I.QUANTIDADE),
                 AVG(I.QUANTIDADE)
    
    FROM PRODUTOS PRO
    
    JOIN ITENSPEDIDO I ON PRO.CODPRODUTO=I.CODPRODUTOO
    
    WHERE DATA >=DATAINI AND
    
                DATAFIM <= :DATAFIM
    
    GROUP BY I.CODPRODUTO


    Natan

    quinta-feira, 28 de maio de 2015 11:54
  • Bom dia Natan,

    Agradeço a atenção, mas nao bateu onde foi minha cagada  ?

    segue a imagem

    quinta-feira, 28 de maio de 2015 12:16
  • inclua um count(i.codproduto) para validar a média.

    Natan

    quinta-feira, 28 de maio de 2015 12:31
  •  opa nada ,

    continua a mesma coisa .

    :(

    Obrigado

    quinta-feira, 28 de maio de 2015 12:38
  • mas o que retornou no count?

    mostra novamente o retorno.


    Natan

    quinta-feira, 28 de maio de 2015 13:24
  • segue

    quinta-feira, 28 de maio de 2015 13:35
  • Decio,

    está correto.... na primeira linha existem 41 pedidos com um total de 514, média 12,5365.

    o que pode estar confuso é a questão de você usar case para qtde e não usar para o estMínimo.


    Natan

    quinta-feira, 28 de maio de 2015 13:55
  • Obrigado Natan,

    porem eu preciso saber a media mensal desse item,

    quanto ao case

    seria pq no item eu tenho unidade a ser vendia como PC ou CT

    ja o estoque minimo pega direto no produto,

    como fazer pra essa media ser mensal no caso teria q dividir o total por 5

    quinta-feira, 28 de maio de 2015 14:00
  • ahhhh certo....

    então você pode simplesmente pegar a própria soma e dividir por 5...

    SUM(I.QUANTIDADE) / 5 media_mes


    Natan

    quinta-feira, 28 de maio de 2015 14:05
  •   Sim corrreto ,

    porem nem sempre sera 5, vai depender do periodo escolhido entendeu ?

    se o cara por ate o mes 4 seria por 4

    tendeu ?

    Obrigdao

    quinta-feira, 28 de maio de 2015 14:08
  • 'tenta assim

    SUM(I.QUANTIDADE) / month(@data_final) - month(@data_inicio) media_mes


    Natan

    quinta-feira, 28 de maio de 2015 14:13
  • mas ai teria q montar uma procedure e passar isso como variavel?

    naum consigo pegar ja do periodo ?

    Obrigado

    quinta-feira, 28 de maio de 2015 14:18
  • tenta assim:

     SUM(I.QUANTIDADE) / (MAX(MONTH(P.DATA_PEDIDO)) -  MIN(MONTH(P.DATA_PEDIDO))) MEDIA_MES



    Natan


    • Editado 'Natan Silva quinta-feira, 28 de maio de 2015 14:53
    quinta-feira, 28 de maio de 2015 14:53
  • ele acusa uma excessao .

    SUM(I.QUANTIDADE) / MAX(MONTH(P.DATA_PEDIDO)) -  MIN(MONTH(P.DATA_PEDIDO)) 

    Msg 130, Level 15, State 1, Line 7
    Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

    quinta-feira, 28 de maio de 2015 16:37
  • nossa veio....

    tenta apenas incluir uma coluna com o max e outra com o min dos meses do pedido e ve se continua reclamando.


    Natan

    quinta-feira, 28 de maio de 2015 16:49
  • Olá Natan agradeço a atenção,

    tentei tambem e nao obtive resultado, continuou o erro 

    ai fiz assim :

     

    SELECT TOTITEM,PRODUTO,AGEL,MINIMO,MAIORMES,QTDE,QTDE/MAIORMES AS MEDIA,GRUPO,SUBGRUPO FROM
    (SELECT COUNT(i.codproduto) TOTITEM ,
      MIN(PRO.DESCEQ) PRODUTO, 
      MIN(PRO.CODEAN) AGEL,
      MIN(PRO.EstMinimo) MINIMO,
      MAX(MONTH(P.DATAPEDIDO)) MAIORMES,
      MIN(MONTH(P.DATAPEDIDO)) MENOSMES,
      SUM(CASE WHEN I.Unidade='CT' THEN I.Qtde *100 ELSE I.Qtde END) QTDE,
      MIN(G.DESCRICAO) GRUPO,
      MIN(S.DESCRICAO) SUBGRUPO

    FROM PRODUTOS PRO
    JOIN ITENSPEDIDO I ON PRO.CODPRODUTO = I.CODPRODUTO
    JOIN SUBGRUPOS S ON PRO.CODSUBGRUPO=S.CODSUBGRUPO
    JOIN GRUPOPRODUTOS G ON PRO.CODGRUPO=G.CODGRUPO
    JOIN PEDIDOS P ON I.NROPEDIDO=P.NROPEDIDO
    WHERE PRO.CODGRUPO=9
      AND Situeq = 0
      AND year(DATAPEDIDO) =2015
    GROUP BY I.CODPRODUTO)ped

    porém nao sei o custo disso de performance , porem deu certo.

    teria forma melhor ?

    Obrigado.

    quinta-feira, 28 de maio de 2015 17:02
  • Oi segue outro raciocinio tbm deu certo 

    hehehe


    SELECT COUNT(i.codproduto) TOTITEM ,
      MIN(PRO.DESCEQ) PRODUTO, 
      MIN(PRO.CODEAN) AGEL,
      MIN(PRO.EstMinimo) MINIMO,
      MAX(MONTH(P.DATAPEDIDO)) MAIORMES,
      MIN(MONTH(P.DATAPEDIDO)) MENOSMES,
      SUM(CASE WHEN I.Unidade='CT' THEN I.Qtde *100 ELSE I.Qtde END) QTDE,
      SUM(CASE WHEN I.Unidade='CT' THEN I.Qtde *100 ELSE I.Qtde END)/ MAX(MONTH(P.DATAPEDIDO)) MEDIA,
      MIN(G.DESCRICAO) GRUPO,
      MIN(S.DESCRICAO) SUBGRUPO
     
    FROM PRODUTOS PRO
    JOIN ITENSPEDIDO I ON PRO.CODPRODUTO = I.CODPRODUTO
    JOIN SUBGRUPOS S ON PRO.CODSUBGRUPO=S.CODSUBGRUPO
    JOIN GRUPOPRODUTOS G ON PRO.CODGRUPO=G.CODGRUPO
    JOIN PEDIDOS P ON I.NROPEDIDO=P.NROPEDIDO
    WHERE PRO.CODGRUPO=9
      AND Situeq = 0
      AND year(DATAPEDIDO) =2015
    GROUP BY I.CODPRODUTO

    quinta-feira, 28 de maio de 2015 17:17
  • certamente que o join iria ser mais eficiente que a subquery, que por sua vez não é uma má prática. Eu precisaria de um cenário semelhante para testar a diferença e talvez modelar de uma forma diferente o que não é o meu caso agora...

    Mas o importante é que o cliente vai ter o relatório!

    Abraço!


    Natan

    quinta-feira, 28 de maio de 2015 17:19