Tôi khuyên bạn nên tính toán tỷ lệ phần trăm đang chạy bằng cách sử dụng hàm cửa sổ và sau đó so sánh kết quả với 80.
Trong mẫu mã nhỏ này, tôi đã chỉ ra cách thực hiện dựa trên kết quả truy vấn của bạn được đặt vào một khối CTE có tên là your_data
. Nó chỉ cho bạn thấy ý tưởng.
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
Trên thực tế, nó trả về 3 hàng và bạn nói rằng bạn mong đợi 4 hàng được hiển thị. Để thêm hàng mà tỷ lệ phần trăm đang chạy trước tiên vượt quá ranh giới của bạn (80), bạn có thể trích xuất tỷ lệ phần trăm danh mục hiện tại từ giá trị đang chạy, tức là thay thế sum(percentage) over (order by category)
với sum(percentage) over (order by category) - percentage
.
HTH