You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postgres中无需子查询/CTE,对多列使用var_samp()聚合函数

在PostgreSQL中无需子查询/CTE对多列计算var_samp()

要实现对多列所有数据计算样本方差,且避免子查询或CTE以追求查询速度,你可以用隐式横向连接的写法,仅扫描一次表就能完成计算:

SELECT var_samp(val) AS varsample
FROM my_table, unnest(array[obs1, obs2]) AS val;

写法说明

PostgreSQL中,FROM子句里的逗号等价于CROSS JOIN LATERAL,unnest(array[obs1, obs2])会把每一行的obs1和obs2拆成两行独立的val值,之后直接对所有val执行var_samp()聚合,结果和你用CTE得到的完全一致,且执行效率更高。

你之前尝试的问题分析

  1. 第一种写法var_samp(array[obs1,obs2])无效,因为var_samp()是针对单列的聚合函数,不接受数组类型参数。
  2. 你参考的子查询写法失败,大概率是因为子查询未加别名,正确的子查询写法应为:
SELECT var_samp(my_col)
FROM (SELECT unnest(array[obs1, obs2]) AS my_col FROM my_table) t;

但该写法仍用到子查询,不如推荐写法简洁高效。

结果验证

用你提供的my_table数据(25行共50个观测值),推荐写法会计算所有50个值的样本方差,结果与CTE实现完全一致。

内容的提问来源于stack exchange,提问作者Python_Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:12:39