Saya sarankan menghitung persentase berjalan menggunakan fungsi jendela dan kemudian membandingkan hasilnya dengan 80.
Dalam contoh kode kecil ini saya telah menunjukkan cara melakukannya berdasarkan hasil kueri Anda yang ditempatkan ke dalam blok CTE yang disebut your_data
. Itu hanya menunjukkan idenya.
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
Sebenarnya itu mengembalikan 3 baris dan Anda mengatakan Anda mengharapkan 4 baris ditampilkan. Untuk menambahkan baris di mana persentase berjalan pertama melebihi batas Anda (80), Anda dapat mengekstrak persentase kategori saat ini dari nilai berjalan, yaitu ganti sum(percentage) over (order by category)
dengan sum(percentage) over (order by category) - percentage
.
HTH