Ik stel voor om een lopend percentage te berekenen met behulp van een vensterfunctie en het resultaat vervolgens te vergelijken met 80.
In dit kleine codevoorbeeld heb ik laten zien hoe u dit moet doen op basis van het resultaat van uw zoekopdracht die is geplaatst in een CTE-blok met de naam your_data
. Het laat je alleen het idee zien.
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
Eigenlijk retourneert het 3 rijen en je zegt dat je verwacht dat er 4 rijen worden getoond. Om de rij toe te voegen waar het hardlooppercentage als eerste uw grens (80) overschrijdt, kunt u het huidige categoriepercentage extraheren uit de lopende waarde, d.w.z. sum(percentage) over (order by category)
met sum(percentage) over (order by category) - percentage
.
HTH