sql - 使用 SQL 进行高效的百分位选择
问题描述
假设我有一个 Postgres 数据库。
我有一个小组的小表和一个大的成员表,其中每个组都是成员的集合,成员只属于一个组。
每个组都应该存储百分位信息(第 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),
...
有没有更快的方法来做到这一点而无需单独的类似子查询?
解决方案
似乎您会计算一次值并加入:
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
在子查询中使用并同时分配所有组。
推荐阅读
- google-pagespeed - html缩小不再是一个因素?
- html - 在 Expo 中将 HTML 格式的文本设置为剪贴板
- java - 在 Java Android Studio 中删除对话框周围的触摸
- java - 从 Spring AMQP Rabbit Consumer 捕获异常
- amazon-web-services - 如何使用 Access-Control-Allow-Origin 提供 AWS S3 文件:* 标头
- c++ - 试图让它在读数之间等待 1 秒(C++ Arduino)
- php - 无法在 mac 上安装 PHP 8
- html - 移动菜单未正确对齐
- java - 静态java方法
- amazon-web-services - AWS Step Function - 动态选择要并行运行的分支