Navrhoval bych vypočítat průběžné procento pomocí funkce okna a poté porovnat výsledek s 80.
V této malé ukázce kódu jsem ukázal, jak to udělat na základě výsledku vašeho dotazu umístěného do bloku CTE s názvem your_data
. To vám jen ukazuje myšlenku.
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
Ve skutečnosti vrací 3 řádky a říkáte, že očekáváte, že se zobrazí 4 řádky. Chcete-li přidat řádek, kde průběžné procento nejprve překročí vaši hranici (80), můžete z průběžné hodnoty extrahovat aktuální procento kategorie, tj. nahradit sum(percentage) over (order by category)
s sum(percentage) over (order by category) - percentage
.
HTH