当前位置: 首页 > 知识库问答 >
问题:

聚合函数作为元组参数postgres

柴飞星
2023-03-14

我想传递聚合函数,如min,max等作为查询参数使用元组。

"select  $5(CAST (vol AS FLOAT)) AS agg_v, " 
                    + "time_bucket_gapfill" + "(($1::text || ' minutes')::interval, t) AS time_function_minute, " 
                    + "tag_id from rtdata "
                    + "where tag_id = any($2) and t > $3 and t < $4 "
                    + "GROUP BY (tag_id, time_function_minute) ORDER BY time_function_minute"

pgException:在io.vertx.pgclient.impl.codec.errorResponse.toException(errorResponse.java:29)在io.vertx.pgclient.impl.codec.prepareStatementCommandCodec.handleerrorResponse(prepareStatementCommandCodec.java:62)在io.vertx.pgclient.impl.codec.pgDecoder.decodeError(PgDecoder.java:233)在.pgdecoder.channelRead(Pgdecoder.java:102)在io.netty.channel.combinedChannelDuplexHandler.java:253)在io.netty.channel.abstractChannelContext.invokeChannelRead(abstractChannelHandlerContext.java:374)在io.netty.channel.abstractChannelContext.java:360)在io.netty.channel.abstractChannelContext.java:352)在管道$HeadContext.ChannelRead(DefaultChannelPipeline.java:1422)在io.netty.channel.abstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374),在io.netty.channel.defaultChannelContext.invokeChannelRead(AbstractChannelHandlerContext.java:360),在io.netty.channel.defaultChannelpipeline.fireChannelRead(AbstractChannelHandlerContext.java:931),在Eventloop.java:700)在io.netty.channel.nio.nio.nioEventloop.processSelectedKeysOptimed(NioEventloop.java:635)在io.netty.channel.nio.nio.nioEventloop.processSelectedKeys(NioEventloop.java:552)在io.netty.channel.nio.nioEventloop.run(NioEventloop.java:514)在threadLocalRunnable.run(FastThreadLocalRunnable.java:30)位于java.lang.thread.run(thread.java:745)

但是如果我用hardcode聚合函数替换$5,它就可以工作了。在此场景中如何动态传递聚合函数?

RxJava代码片段:

return txBegin()
                .flatMapObservable(tx -> 
                    tx.rxPrepare(abovesql)
                    .flatMapObservable(pq -> {
                        return pq.createStream(50, 
                                                Tuple.of(
                                                    evalBucketInterval(req),
                                                    req.getTags().toArray(new Integer[0]),
                                                    parse(req.getStartDate()), 
                                                    parse(req.getEndDate()),
                                                    parse(req.getAggFunc())))
                                    .toObservable();
                    })
                .doAfterTerminate(tx::commit))
            .map(this::toFuncJson);

共有1个答案

仲孙昊焱
2023-03-14

PostgreSQL只允许将参数用作值,并且不理解何时将参数用作函数名、表名等,因此不能将聚合名作为参数传递。

我建议在应用程序中通过连接包含聚合函数名的字符串值来解决这个问题。我想它可能是类似的,但我不确定确切的语法和您的环境的限制是什么:

"select  "+ my_agg_func_name +"(CAST (vol AS FLOAT)) AS agg_v, " 
                    + "time_bucket_gapfill" + "(($1::text || ' minutes')::interval, t) AS time_function_minute, " 
                    + "tag_id from rtdata "
                    + "where tag_id = any($2) and t > $3 and t < $4 "
                    + "GROUP BY (tag_id, time_function_minute) ORDER BY time_function_minute"
 类似资料:
  • 问题内容: 我在MySQL上有两个表,我想知道在MySQL上是否有任何聚合函数,如postgreSQL的array_agg()。 表1的属性只有8条记录表2的记录捕获了该属性,因此对于同一属性,有时可以是1或n次,我得到了这个Qry: 如果我使用GROUP BY部分,则会得到以下信息: 丢失了除users_admin_id的第一个值以外的任何其他数据。我知道我可以通过postgreSQL的arra

  • 主要内容:1.COUNT函数,2. SUM函数,3. AVG函数,4. MAX函数,5. MIN函数SQL聚合函数用于对表的单个列的多行执行计算,它只返回一个值。它还用于汇总数据。 SQL聚合函数的类型,如下图所示 - 接下来,我们一个个地讲解。 1.COUNT函数 函数用于计算数据库表中的行数,它可以在数字和非数字数据类型上工作。 函数使用返回指定表中所有行的计数。 包函重复值和值。 语法 假设有一个表,它的结构和数据如下所示 - PRODUCT COMPANY QTY RATE COST I

  • 问题内容: 在解释CTE的一些概念时,有人问了一个可爱的问题..我们可以找到行的乘法吗,而我们总是从新手开始集中精力。那给了我一个想法!仅使用SQL是否有可能。我还考虑了我们甚至可以支持的最大精度,因为该产品可能非常庞大。 话虽如此,我们不能编写自己的聚合函数。(可以吗?)我在想仅使用SQL就有可能。 我想到的就像是自己添加2,3次。.但是当集合很大时..由于繁琐,我无法实现。 另一个可能是和,为

  • 问题内容: 我只是在学习MySQL-是否有组合(或嵌套)聚合函数的方法? 给定一个查询: 这将给我每个用户回答的问题数量。我真正想要的是每个用户回答的平均问题数量…… 计算此统计信息的正确方法是什么? 如果有可能,是否有办法针对每个问题分解此统计信息?(用户可以多次回答相同的问题)。就像是: 问题答案: 您必须使用子查询: 您不能将一个聚合与另一个聚合一起包装。如果MySQL支持分析/排序/窗口功

  • 问题内容: 我想做一个相当复杂的查询/聚合。我看不到该怎么做,因为我刚刚开始使用ES。我的文档看起来像这样: 现在,我想为每个关键字计算property_1可以具有的几个可能值中有多少个。也就是说,我需要一个具有以下响应的存储桶聚合: 如果需要映射,您还可以指定哪个吗?我没有任何非默认映射,我只是将所有内容都转储在那里。 编辑:通过在此处发布上一个示例的批量PUT为您节省了麻烦 编辑2: 我只是试

  • 主要内容:应用聚合函数在《 Python Pandas窗口函数》一节,我们重点介绍了窗口函数。我们知道,窗口函数可以与聚合函数一起使用,聚合函数指的是对一组数据求总和、最大值、最小值以及平均值的操作,本节重点讲解聚合函数的应用。 应用聚合函数 首先让我们创建一个 DataFrame 对象,然后对聚合函数进行应用。 输出结果: 1) 对整体聚合 您可以把一个聚合函数传递给 DataFrame,示例如下: 输出结果: 2)