Cálculo de Média no Oracle

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
wargu
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Qua, 11 Mar 2015 1:54 pm

Bom dia prezados amigos!

Sou novo no fórum e novo também em SQL, tenha uma tarefa que não consigo resolver sozinho, preciso da ajuda de vocês!

Tenho um ERP que usa o banco de dados Oracle 11i . Neste ERP tenho uma tela onde são feitas avaliações diárias de desempenho de fornecedores.

São sete perguntas para uma avaliação, cada pergunta tem uma resposta apenas, a resposta tem um valor, gostaria de calcular a média das respostas por avaliação durante um período de data que irei usar no relatório que estou desenvolvendo.

Tentei usar o SUM mas não deu certo, pois acredito eu, que vou ter que criar uma variável para ir armazenando os valores de acordo com a resposta e depois dividir pela quantidade de avaliações. Seria isso mesmo? Se sim podem esboçar com eu faco isso?

Oque fiz até agora:

Selecionar tudo

SELECT   DISTINCT

  (SELECT COUNT(CD_AVALIACAO)
          FROM  ISO_AVALIACAO
          WHERE DT_AVALIACAO=A.DT_AVALIACAO
          AND CD_FORNECEDOR = A.CD_FORNECEDOR )QTDE,

     A.CD_AVALIACAO,
     A.DT_AVALIACAO,
    A.CD_FORNECEDOR,
       A.CD_ENT_PRO,
       A.CD_RANKING,

 /*      (SELECT  SUM(VL_ITPERGUNTA) 
          FROM ISO_ITPERGUNTA)
         SOMATUDO, 
   (SELECT
           CASE
           WHEN B.CD_RESPOSTA = 22085 THEN SUM(VL_ITPERGUNTA)
           END Pergunta3
           FROM  ISO_PERGUNTA
           WHERE CD_PERGUNTA=D.CD_PERGUNTA)
           SOMA_PERGUNTA, */

           A.VL_NOTA,
       D.CD_PERGUNTA,
         DS_PERGUNTA,
       DS_ITPERGUNTA,
     B.CD_ITPERGUNTA,
       VL_ITPERGUNTA

FROM

     ISO_AVALIACAO A,
      ISO_RESPOSTA B,
    ISO_ITPERGUNTA C,
      ISO_PERGUNTA D,
       ISO_RANKING E


WHERE A.CD_AVALIACAO=B.CD_AVALIACAO
AND B.CD_ITPERGUNTA=C.CD_ITPERGUNTA
AND C.CD_PERGUNTA=D.CD_PERGUNTA
AND A.CD_RANKING=E.CD_RANKING
AND c.CD_PERGUNTA=d.CD_PERGUNTA
--AND A.CD_AVALIACAO=158518
AND A.CD_FORNECEDOR IN (301,43)
AND A.DT_AVALIACAO BETWEEN  '01/03/2015' AND '12/03/2015'


GROUP BY A.CD_AVALIACAO,
         A.DT_AVALIACAO,
        A.CD_FORNECEDOR,
           A.CD_ENT_PRO,
           A.CD_RANKING,
              A.VL_NOTA,
             A.VL_MEDIA,
          DS_ITPERGUNTA,
          VL_ITPERGUNTA,
            DS_PERGUNTA,
             DS_RANKING,
          D.CD_PERGUNTA,
          B.CD_RESPOSTA,
           E.CD_RANKING,
        B.CD_ITPERGUNTA

ORDER BY A.CD_FORNECEDOR,
          A.CD_AVALIACAO
Anexos
AVAL_DUVIDA.png
FernandesRE
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Qui, 08 Jan 2015 9:22 pm

Você pode tentar o AVG.

Imaginei algo assim:

Selecionar tudo

SELECT A.CD_AVALIACAO,
  D.CD_PERGUNTA,
  D.DS_PERGUNTA,
  AVG(VL_ITPERGUNTA) Media
FROM ISO_AVALIACAO A,
  ISO_RESPOSTA B,
  ISO_ITPERGUNTA C,
  ISO_PERGUNTA D,
  ISO_RANKING E
WHERE A.CD_FORNECEDOR IN (301,43)
AND A.DT_AVALIACAO BETWEEN '01/03/2015' AND '12/03/2015'
AND A.CD_AVALIACAO  = B.CD_AVALIACAO
AND B.CD_ITPERGUNTA = C.CD_ITPERGUNTA
AND D.CD_PERGUNTA   = C.CD_PERGUNTA
AND E.CD_RANKING    = A.CD_RANKING
AND c.CD_PERGUNTA   = d.CD_PERGUNTA
GROUP BY A.CD_AVALIACAO,
  D.CD_PERGUNTA,
  D.DS_PERGUNTA
[]s
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 9 visitantes