none
Dúvida na logica do código RRS feed

  • Pergunta

  • Olá Pessoal boa tarde, estou focado nos meus estudos em SQL para a minha certificação nos exames 70-432 e 70-433.

    Estou com uma dúvida no código abaixo utilizando subQuery.

    USE Adventureworks
    GO
    SELECT DISTINCT PI1.ProductID, PI1.Quantity
    FROM Production.ProductInventory AS PI1
    WHERE PI1.Quantity >
    (SELECT AVG(PI2.Quantity)
    FROM Production.ProductInventory AS PI2
    WHERE PI1.ProductID = PI2.ProductID)

    A minha dúvida é a seguinte, a query não deveria retornar apenas os valores que estiverem acima da minha média?

    Abaixo temos um trecho que é retornado, a Media é um valor de 314 na coluna quantidade, ali temos valores abaixo da média.

    Pessoal muito obrigado pela ajuda.


    Wellinghton Pimentel Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    segunda-feira, 10 de dezembro de 2012 18:51

Respostas

  • Wellington,

    Como você esta utilizando Subquery, minha sugestão inicialmente executa cada query de forma separada e veja o resultado.

    Depois você começa a fazer a análise com base nestes resultados.

    Não se esqueça que você terá 2 condições, o Where fazendo o filtro WHERE PI1.ProductID = PI2.ProductID dentro da subquery e o outro Where filtrando a WHERE PI1.Quantity > que a AVG da PI2.



    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Sugerido como Resposta Roberson Naves sexta-feira, 14 de dezembro de 2012 19:32
    • Marcado como Resposta Ricardo Russo quarta-feira, 9 de janeiro de 2013 12:08
    quarta-feira, 12 de dezembro de 2012 17:53

Todas as Respostas

  • Boa tarde

    Pelo que entendi do seu código é o seguinte a média não é um total geral , mas sim um total geral de cada produto repetido.

    Veja o caso do 345 esse produto se repete 2 vezes até o que a imagem mostra, nessa caso a somatoria dá 636 que divido por 2 dá 318

    Esse numero 318 comparado com o total geral de 314  está acima da média entendeu.

    Espero ter ajudado.


    Davi Murilo Referência Principal : Jesus que ilumina minha mente. Referência Profissonal : http://www.tidm.com.br


    • Editado Davi Murilo segunda-feira, 10 de dezembro de 2012 19:35
    segunda-feira, 10 de dezembro de 2012 19:34
  • Boa tarde,

    Acredito que sim, deveriam ser retornadas apenas as linhas cuja quantidade está acima da média da quantidade do produto.

    Acho que você teria que analisar o resultado da query abaixo, ou postar o resultado da mesma para podermos analisar:

    SELECT ProductID, AVG(Quantity) AS AVGQuantity
    FROM Production.ProductInventory 
    GROUP BY ProductID

    Qualquer coisa volte a postar.


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 10 de dezembro de 2012 19:35
  • Caso você já tenha tirado sua dúvida por favor marque como respondida.

    Davi Murilo Referência Principal : Jesus que ilumina minha mente.
    Referência Profissonal : http://www.tidm.com.br

    terça-feira, 11 de dezembro de 2012 19:15
  • Wellington,

    Como você esta utilizando Subquery, minha sugestão inicialmente executa cada query de forma separada e veja o resultado.

    Depois você começa a fazer a análise com base nestes resultados.

    Não se esqueça que você terá 2 condições, o Where fazendo o filtro WHERE PI1.ProductID = PI2.ProductID dentro da subquery e o outro Where filtrando a WHERE PI1.Quantity > que a AVG da PI2.



    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Sugerido como Resposta Roberson Naves sexta-feira, 14 de dezembro de 2012 19:32
    • Marcado como Resposta Ricardo Russo quarta-feira, 9 de janeiro de 2013 12:08
    quarta-feira, 12 de dezembro de 2012 17:53