2010-08-13 54 views
2

如何獲取數據庫表中前x%的值。如何獲取數據庫表中的前x%值

例如,我有一個日誌文件,我加載到數據庫表中。我想拋出最長的1%的請求,因爲他們歪曲數據。

任何簡單的方法來做到這一點?

順便說一句我正在使用德比數據庫。

謝謝

+0

按運行時順序遞減,跳過第一個百分比? :) – bzlm 2010-08-13 13:04:29

回答

1

您是否需要累計或個人百分比?我不知道使用Derby計算累計總數的方法,但我知道H2數據庫/ MySQL的一種方法。因此,只有我的示例的第一部分適用於德比。對於MySQL,您需要用CAST(...作爲整數)替換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

我只能說是哇 – Wiszh 2010-08-27 17:24:44

相關問題