【问题标题】:multiply(num) aggregate function in postgresqlpostgresql 中的 multiply(num) 聚合函数
【发布时间】:2014-02-07 08:57:32
【问题描述】:

文档非常简单,这可能非常简单。有没有办法通过postgresql中的乘法运算符来聚合列。我知道我可以做 count(column) 或 sum(column),但是有没有可以使用的 multiply(column) 或 product(column) 函数。如果没有,任何想法如何实现它。

我正在使用 postgres 9.1

问候, 哈桑

【问题讨论】:

    标签: aggregate-functions postgresql-9.1


    【解决方案1】:

    当然,只需在基本乘法函数上定义一个聚合。例如。对于大整数:

    CREATE AGGREGATE mul(bigint) ( SFUNC = int8mul, STYPE=bigint );
    

    例子:

    regress=> SELECT mul(x) FROM generate_series(1,5) x;
     mul 
    -----
     120
    (1 row)
    

    CREATE AGGREGATE

    【讨论】:

    • 有效。非常感谢
    • 偶然发现此问题的其他信息。我需要这个双数,所以我做了:CREATE AGGREGATE mul(double precision) (SFUNC = float8mul, STYPE=double precision)
    【解决方案2】:

    这是一个适用于所有数值数据类型的版本:

    CREATE FUNCTION mul_sfunc(anyelement, anyelement) RETURNS anyelement
       LANGUAGE sql AS 'SELECT $1 * coalesce($2, 1)';
    
    CREATE AGGREGATE mul(anyelement) (
       STYPE = anyelement,
       INITCOND = 1,
       SFUNC = mul_sfunc,
       COMBINEFUNC = mul_sfunc,
       PARALLEL = SAFE
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多