Вам нужны накопленные или индивидуальные проценты? Я не знаю, как вычислить накопленную сумму, используя Derby, но я знаю способ для базы данных H2/MySQL. Так что только первая часть моего примера будет работать на Derby. Для MySQL, вам нужно заменить CAST (... AS INTEGER) с CAST (... AS ПОДПИСАННОМУ INTEGER):
drop table test;
create table test(data int);
create index idx_test_data on test(data desc);
insert into test values(1), (1), (1), (2);
insert into test select data from test;
insert into test select data from test;
insert into test select data from test;
insert into test select data from test;
insert into test select data from test;
insert into test select data from test;
insert into test select data from test;
insert into test select data from test;
insert into test select data from test;
insert into test select data from test;
insert into test select data from test;
insert into test select data from test;
insert into test select data from test;
insert into test values(100), (200), (800);
select sum(data), count(*) from test;
select data, (data * 100./(select sum(data) from test)) percent
from test where data * 100./(select sum(data) from test) < 1 order by data desc;
select @acc := 0, @total := sum(data) from test;
create table pa as select data, cast(@acc := @acc + (data * 100./@total) as integer) percent_acc
from test order by data desc;
select * from pa where percent_acc > 2 limit 10;
drop table pa;
Сортировать по убыванию выполнения, пропустите первый процент? :) – bzlm