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

在app.preset.io执行PostgreSQL精度召回查询时遇类型转换错误求助

问题排查与解决方案

错误原因分析

你遇到的类型转换错误,本质是app.preset.io底层查询引擎(大概率是Trino/Presto,而非原生PostgreSQL)对ROUND函数的类型签名要求更严格。原生PostgreSQL会自动隐式转换兼容类型,但Trino要求ROUND的输入类型必须完全匹配其支持的签名集合(如Exact([Float64])、Exact([Decimal])等),而你的查询中存在Float32(real)和Int64(整数0)的混合类型,导致类型转换失败。

修正后的查询语句

将所有数值类型统一转换为numeric(Decimal),同时确保CASE分支中返回的默认值0也显式转换为同类型,消除类型不匹配:

WITH time_periods AS (
    SELECT 
        year, 
        week, 
        cast(tp as numeric) as tp, 
        cast(fp as numeric) as fp,
        cast(tn as numeric) as tn, 
        cast(fn as numeric) as fn
    FROM metrics_table  
    WHERE week >= 37    
)
SELECT 
    year,
    week,
    CASE 
        WHEN (tp + fp) = 0 THEN 0::numeric
        ELSE ROUND(tp / (tp + fp), 3)
    END as precision,
    CASE 
        WHEN (tp + fn) = 0 THEN 0::numeric
        ELSE ROUND(tp / (tp + fn), 3)
    END as recall
FROM time_periods
ORDER BY year, week

关键调整点

  • 把CTE中的real转换改为numeric,避免Float32类型带来的兼容性问题
  • CASE语句的THEN 0改为0::numeric,确保默认值与计算结果的类型完全一致
  • 移除了冗余的重复类型转换(CTE已经转成numeric,SELECT里无需再重复cast)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 14:47:08