Sugeriría calcular un porcentaje de ejecución usando una función de ventana y luego comparar el resultado con 80.
En esta pequeña muestra de código, he mostrado cómo hacerlo según el resultado de su consulta colocada en un bloque CTE llamado your_data
. Simplemente te muestra la idea.
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
En realidad, devuelve 3 filas y usted dice que espera que se muestren 4 filas. Para agregar la fila donde el porcentaje actual primero excede su límite (80), puede extraer el porcentaje de categoría actual del valor actual, es decir, reemplazar sum(percentage) over (order by category)
con sum(percentage) over (order by category) - percentage
.
HTH