关于自定义聚合函数调用一部分类型不符的问题

我建立了下面的函数

  • 这个叫做ALL_ADD的函数的目的是要将一组real的数据加起来,跟SUM( )其实功能是一样的

CREATE OR REPLACE FUNCTION all_add_state(
    pre real,
    next real)
  RETURNS real AS
$BODY$
SELECT 
  CASE
    WHEN $2 IS NULL OR $2 = 0 THEN $1
    ELSE COALESCE($1,0) +$2
    END;
$BODY$
  LANGUAGE sql IMMUTABLE;

CREATE OR REPLACE FUNCTION all_add_final(real)
  RETURNS real AS
$BODY$
SELECT $1
$BODY$
  LANGUAGE sql IMMUTABLE;

CREATE AGGREGATE ALL_ADD(real)(
  SFUNC = all_add_state,
  STYPE = real,
  FINALFUNC = all_add_final,
  INITCOND = 0
);

然后run就可以成功建立一个名叫ALL_ADD的聚合函数,

但是在使用的时候遇到一点点问题

  • 我将一组名为price的数据传进去,提示类型不符(忘记error信息具体情况了,但意思就是不符),建议我转换类型。

我本来以为是我的函数写错了不能识别price,但是今天又考虑了一下,为什么不是参数错误呢?

  • 所以我又查看了price的属性,果真是double precision,所以在调用的时候改了:
SELECT ALL_ADD(price::real) FROM "US30"

run就正确了

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试