1
私はデータベースから累積頻度データを取得したいと考えています。私が見たユニークな状態の更新回数とその状態量の更新を持つユーザーの数の単純な一時表を作成しました。SQL:高速累積頻度クエリ(postgres)
Table "pg_temp_4.statuses_count_tmp"
Column | Type | Modifiers
----------------+---------+-----------
statuses_count | integer |
frequency | bigint |
Indexes:
"statuses_count_idx" UNIQUE, btree (statuses_count)
私の現在のクエリは次のとおりです。
select statuses_count, frequency/(select * from total_statuses)::float, (select sum(frequency)/(select * from total_statuses)::float AS percentage from statuses_count_tmp WHERE statuses_count <= SCT.statuses_count) AS cumulative_percent FROM statuses_count_tmp AS SCT ORDER BY statuses_count DESC;
しかし、これにはかなり時間がかかり、クエリの数は非常に急速に成長します。だから私が持っている〜50,000行では、私は50k階乗の行を読むことを検討しています。ここに座って質問を見ると、私はtheresが私がまだ経験していないより良い解決策を望んでいる。このような何か得ることを望ん
:
0 0.26975161 0.26975161
1 0.15306534 0.42281695
2 0.05513516 0.47795211
3 0.03050646 0.50845857
4 0.02064444 0.52910301
ああ、そのような運はありません。数日後に更新することを本当に望んでいませんが、一度更新すればこのソリューションを念頭に置いておきます。 – Peck
+1ほとんど同じ答えを書いています。 –
@Peck:plpgsql関数を使用して、8.3で動作するはずのソリューションを追加しました。 – araqnid