2
如何獲取數據庫表中前x%的值。如何獲取數據庫表中的前x%值
例如,我有一個日誌文件,我加載到數據庫表中。我想拋出最長的1%的請求,因爲他們歪曲數據。
任何簡單的方法來做到這一點?
順便說一句我正在使用德比數據庫。
謝謝
如何獲取數據庫表中前x%的值。如何獲取數據庫表中的前x%值
例如,我有一個日誌文件,我加載到數據庫表中。我想拋出最長的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;
我只能說是哇 – Wiszh 2010-08-27 17:24:44
按運行時順序遞減,跳過第一個百分比? :) – bzlm 2010-08-13 13:04:29