2010-08-13 19 views
2

Comment puis-je obtenir le top x% de valeurs dans une table de base de données.Comment puis-je obtenir le top x% de valeurs dans une table de base de données

Par exemple, j'ai un fichier journal que j'ai chargé dans une table db. Je voudrais éliminer le plus long 1% de demandes en cours car elles faussent les données.

Un moyen simple de faire cela?

BTW J'utilise la base de données Derby.

Merci

+0

Trier par exécution décroissant, passez le premier pour cent? :) – bzlm

Répondre

1

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; 
+0

Tout ce que je peux dire c'est wow – Wiszh