假设我有一个Postgres DB。
我有一个小的组表和一个大的成员表,其中每个组都是成员的集合,并且成员只属于一个组。
每组都应该存储百分位数信息(0到100,1%的增量)。
我知道我可以使用许多子选择查询来选择许多百分位数,如下面的示例所示,但是对于101 (包括第0个)百分位数查询来说,这似乎是非常低效的。
UPDATE groups as g
SET percentile_zero = (
SELECT percentile_cont(0) WITHIN GROUP (ORDER BY m.age) from members m where m.fk_group_id = 10),
percentile_one = (
SELECT percentile_cont(0.01) WITHIN GROUP (ORDER BY m.age) from members m where m.fk_group_id = 10),
...有没有一种更快的方法来做到这一点,而不需要单独的相似的子查询?
发布于 2021-07-29 02:37:10
看起来你只需要计算一次这些值,然后加入:
update groups g
set
from (select fk_group_id,
percentile_cont(0.00) within group (order by age) as p_00,
percentile_cont(0.01) within group (order by age) as p_01,
percentile_cont(0.02) within group (order by age) as p_02,
. . .
from members m
where fk_group_id = 10
group by fk_group_id
) m
where m.fk_group_id = g.group_id;当然,您可以在子查询中使用group by,并同时分配所有组。
https://stackoverflow.com/questions/68565719
复制相似问题