Avez-vous besoin accumulés ou un individu pour cent? Je ne connais pas de moyen de calculer le total cumulé en utilisant Derby, mais je connais un moyen pour la base de données H2/MySQL. Donc, seule la première partie de mon exemple fonctionnera pour Derby. Pour MySQL, vous devez remplacer CAST (... AS Integer) avec CAST (... AS Integer SIGNE):
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;
Trier par exécution décroissant, passez le premier pour cent? :) – bzlm