2010-08-13 2 views
2

Как получить верхний x% значений в таблице базы данных.Как получить верхний x% значений в таблице базы данных

Например, у меня есть файл журнала, который я загрузил в таблицу db. Я хотел бы выбросить самые длинные 1% запросов, поскольку они искажают данные.

Любой простой способ сделать это?

BTW Я использую базу данных derby.

Thanks

+0

Сортировать по убыванию выполнения, пропустите первый процент? :) – bzlm

ответ

1

Вам нужны накопленные или индивидуальные проценты? Я не знаю, как вычислить накопленную сумму, используя 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; 
+0

Все, что я могу сказать, это wow – Wiszh

Смежные вопросы