Бих предложил да изчислите текущия процент с помощта на прозоречна функция и след това да сравните резултата с 80.
В този малък примерен код показах как да го направя въз основа на резултата от вашата заявка, поставена в CTE блок, наречен your_data
. Просто ви показва идеята.
with
your_data (category, percentage) as(
-- sample data based on your example
select 1, 32 from dual union
select 2, 20 from dual union
select 3, 20 from dual union
select 4, 10 from dual union
select 5, 18 from dual
),
t as (
select your_data.*,
-- running sum calculation
sum(percentage) over (order by category) pctg_running
from your_data
)
select *
from t
where pctg_running <= 80
Всъщност той връща 3 реда и вие казвате, че очаквате да бъдат показани 4 реда. За да добавите реда, където текущият процент първо надвишава вашата граница (80), можете да извлечете текущия процент на категория от текущата стойност, т.е. да замените sum(percentage) over (order by category)
с sum(percentage) over (order by category) - percentage
.
HTH