Dies ist zwar nicht direkt auf Ihr Problem anwendbar, aber wenn Sie eine Reihe von Zahlen für die Anzeige runden, ist nie garantiert, dass Sie Zahlen erhalten, die sich zu 100 addieren, es sei denn, Sie treffen besondere Vorkehrungen. Wenn Sie z. B. 33,33333, 33,33333 und 33,33333 runden, fehlt Ihnen eine Zahl in der Summe. Daher ist es logisch, dass Sie den Prozentsatz für den größten Wert in der Gruppe ändern, um die Differenz zu berücksichtigen.
Hier ist eine Möglichkeit, dies in Oracle SQL zu tun, indem analytische Funktionen und eine Unterabfrage-Faktorisierungsklausel (WITH) verwendet werden, um Beispieldaten zu erzeugen.
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