Calculo de porcentagem

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
cfernando11
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Dom, 01 Jun 2008 11:14 pm
Localização: sp

Pessooal ,
Preciso saber urgentemente como faço um calculo simples de porcentagem a partir de um resultado de duas colunas

Selecionar tudo

select a.CODIGO_ASSOCIADO, a.VLR_ORCADO_MATMED, a.VLR_GASTO_MATMED
from hs_fechamento  a
where a.VLR_ORCADO_matmed < a.VLR_GASTO_matmed
ou seja tenho duas colunas
uma que me tras o resultado c/ menor valor = 46,56
e outra que tras o valor maior = 58,2
preciso fazer um calculo no oracle que me tras o percentual gasto a mais entre a menor para a maior..
Alguém pode me ajudar?????
thiago.pinheiro
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Seg, 23 Jun 2008 11:06 am
Localização: Uberlândia - MG

Olá...

Bom... não sei se é o mais usual... mas era a solução que tava no gancho!
Olha se resolve seu problema?

Selecionar tudo

SELECT (((valor_maior / valor_menor)*100)-100) FROM DUAL;
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Só complementando, talvez seja útil.
Dá pra se fazer utilizando GREATEST e LEAST.

Selecionar tudo

SELECT   ((GREATEST (58.20, 46.56) - LEAST (58.20, 46.56)) * 100)
       / (GREATEST (58.20, 46.56)) percentual
  FROM DUAL
thiago.pinheiro
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Seg, 23 Jun 2008 11:06 am
Localização: Uberlândia - MG

Testei o código de nosso amigo Trevisoli, a título de conhecimento, uma vez que nunca havia utilizado as funções GREATEST e LEAST. Percebi que os resultados retornados não estão corretos de acordo com a necessidade do programa... A diferença entre os dois valores (58.20 e 46.56) é de 25% e o código acima retorna 20...
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Thiago, beleza brother?

Coloquei apenas a título de conhecimento.
Estar correto ou não, depende da regra.
Eu fiz a porcentagem sobre o MAIOR valor, que dá 20%. Sobre o MENOR, é correto que dá mesmo 25%.

Selecionar tudo

SELECT   ((GREATEST (58.20, 46.56) - LEAST (58.20, 46.56)) * 100) 
       / (LEAST(58.20, 46.56)) percentual 
  FROM DUAL;
Dependendo da necessidade do utilizador, basta alterar a regra.
A intenção aqui, foi apenas postar uma forma de se fazer.
Fábio Neves
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Ter, 06 Nov 2007 9:35 am
Localização: Salvador - Ba

Já resolveu o problema?
Tenta assim

Selecionar tudo

select a.CODIGO_ASSOCIADO, a.VLR_ORCADO_MATMED, a.VLR_GASTO_MATMED, ((a.VLR_GASTO_matmed / a.VLR_ORCADO_matmed * 100)-100) 
from hs_fechamento  a 
where a.VLR_ORCADO_matmed < a.VLR_GASTO_matmed
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Pessoal:
Antes temos que saber sobre O QUE estamos calculando o percentual! (abaixo os números 80 e 100 para demonstrar)

Digamos que x = 100 e y = 80

CASO 1
y / x
ou seja: (80/100*100)-100 = -20% (negativo)
com relação ao x, o y é 20% menor !

Exemplo:
100 e 110:
(110/100*100)-100 = 10%
Ou seja: o 110 com relação ao 100 é 10% maior.

CASO 2
x / y
ou seja: (100/80*100)-100 = 25% (positivo)
com relação ao y, o x é 25% maior !

Exemplo:
100 e 110:
(100/110*100)-100 = -9.09%
Ou seja: o 100 com relação ao 110 é 9.09% menor.
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

olha uma coisinha legal qui eu fiz =D
na verdade eu vi em um site, um script qui gerava o grafico.....

ai eu acomodei esse select...
e fiz um bloko legalzinhu....

Selecionar tudo

DECLARE
  total      number;
  usado      number;
  x          number;
  y          number;
  v_retorno  varchar2(32767);
BEGIN

  x     := 100;
  total := round(&TOTAL);
  usado := round(&USADO);
  y     := floor(floor(usado*x)/total);

  select rpad(rpad('X',y,'X'),x,'-')
    into v_retorno
    from dual;

  dbms_output.put_line('-');
  dbms_output.put_line('- % de espaço usado: '||y||'%');
  dbms_output.put_line('- % de espaço livre: '||floor(x-y)||'%');
  dbms_output.put_line('- '||v_retorno);
  dbms_output.put_line('- 0%'||lpad('50%',50)||lpad('100%',48));
  dbms_output.put_line('-');
END;
/
wesleyaferreira
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Qui, 03 Abr 2014 11:44 am

Olá boa tarde!

A expressão que esta procurando é RATIO_TO_REPORT

Selecionar tudo

 

SELECT last_name, salary,
            Round(((RATIO_TO_REPORT(SALARY) OVER (partition by FUNCTION_PROF ))*100),2) AS rr
   FROM employees
   WHERE job_id = 'PU_CLERK';


Responder
  • Informação
  • Quem está online

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