Я хочу получить данные о накопленной частоте из нашей базы данных. Я создал простую временную таблицу со всеми уникальными подсчетами обновлений статуса, которые мы видели, и количеством пользователей, которые имеют такое количество обновлений статуса.
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 факторных строк для чтения. Сидя здесь и наблюдая за тем, как прослеживается вопрос, я надеюсь, что есть лучшее решение, которое я пока не нашел.
Надеясь получить что-то вроде этого:
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