Esto podría no abordar se emite directamente, pero cuando alrededor de un conjunto de números de pantalla que nunca está garantizado para obtener los números que se suman a 100 a menos que tome precauciones especiales. Por ejemplo, al redondear 33.33333, 33.33333 y 33.33333 va a dejar uno corto en la suma, por lo que lo lógico es modificar el porcentaje del valor más grande en el conjunto para tener en cuenta cualquier diferencia.
Esta es una forma de hacerlo en Oracle SQL utilizando funciones analíticas y una cláusula de factorización de subconsulta (WITH) para generar datos de muestra.
with data as (select 25 num from dual union all
select 25 from dual union all
select 25 from dual)
select num,
case
when rnk = 1
then 100 - sum(pct) over (order by rnk desc
rows between unbounded preceding
and 1 preceding)
else pct
end pct
from
(
select num,
round(100*ratio_to_report(num) over()) pct,
row_number() over (order by num desc) rnk
from data
)
/
NUM PCT
---------------------- ----------------------
25 33
25 33
25 34
Gracias, este es el que se ha ido al redondear el número, las otras respuestas funcionaron bien, aunque gracias a cada uno :) –
He encontrado es mejor convertir a decimal que flotar. Algunas divisiones funcionan mejor con decimal, al menos en Microsoft SQL Server: SELECCIONAR 5555/CAST (1000 AS float), CAST (5555/CAST (1000 AS float) AS numeric (5, 2)), 5555/CAST (1000 AS decimal), CAST (5555/CAST (1000 AS decimal) AS Numérico (5, 2)) – user12861