Facilidades do Oracle: Descobrindo ratio com RATIO_TO_REPORT()

Mais uma facilidade provida pelo gigante Oracle sendo exposta! Novamente eliminando subquery, que é indispensável para resolver a próxima questão se estiver usando o MySQL.

Dessa vez, a questão é a seguinte:
Retornar o nome dos usuários (únicos na tabela), e o ratio no qual o valor do campo valor representa em relação a soma de todos usuários.

No MySQL, isso poderia ser resolvido como:

SELECT nome,
    (valor * (SELECT SUM(valor) FROM teste) / 100) ratio
  FROM teste

Já no Oracle, há uma função chamada RATIO_TO_REPORT(), que já faz todo esse trabalho. Então ficaria assim:

SELECT nome, RATIO_TO_REPORT(valor) OVER ( ) ratio
  FROM teste

Como não usei a cláusula de partição na OVER dessa vez (diferente do post anterior), o ratio é calculo em cima de todas as linhas da tabela.

Simples assim!

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

More information about formatting options