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

如何在PostgreSQL中实现MySQL类似的子查询引用选中值功能?

嘿,我来帮你把这段MySQL查询转换成PostgreSQL兼容的写法~

首先拆解下你原MySQL语句的逻辑:从sometable筛选出type='A'的行,同时对每一行的Date,在tsdata里汇总该日期所有High的总和,作为MySum返回。

在PostgreSQL里,我们有几种更优雅的实现方式,推荐优先用窗口函数(性能更优,写法也简洁):

方法一:使用窗口函数(推荐)
SELECT 
    "Date",
    SUM("High") OVER (PARTITION BY "Date") AS MySum
FROM sometable
WHERE type = 'A';

这里的SUM("High") OVER (PARTITION BY "Date")会自动按Date分组计算总和,和你原语句的逻辑完全一致,而且不需要额外的子查询重复扫描表,效率更高。

方法二:关联子查询(贴近原语句逻辑)

如果你更想贴近原MySQL的子查询写法,也可以用关联子查询实现——PostgreSQL不支持MySQL那种在SELECT里赋值会话变量再复用的方式,但我们可以直接通过表别名关联当前行的Date:

SELECT 
    st."Date",
    (SELECT SUM(ts."High") FROM tsdata ts WHERE ts."Date" = st."Date") AS MySum
FROM sometable st
WHERE st.type = 'A';

这里给sometable起了别名st,子查询里直接用st."Date"匹配tsdata中的日期,和原语句用@date的效果完全一样。

⚠️ 注意:PostgreSQL对标识符的大小写是敏感的,如果你的字段名是大写的(比如Date),必须用双引号"Date"包裹,否则会被自动转换成小写,可能导致字段不存在的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:02:41