我希望从我们的数据库中获取累积频率数据。我创建了一个简单的临时表,其中包含我们看到的所有唯一状态更新计数,以及具有该状态更新量的用户数量。
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 行,我正在查看要读取的 50,000 个阶乘行。坐在这里看着查询逐渐消失,我希望有一个更好的解决方案,我还没有完成。
希望得到这样的东西:
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