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

PostgreSQL-返回多列的函数

彭宏阔
2023-03-14

下面是一个提供两列结果的函数。

在这个函数中,有一个循环用于返回结果。

功能:

Create Type Repeat_rs as (
label text,
count bigint
)

CREATE OR REPLACE FUNCTION Repeat(fromDate date,toDate date)
returns SETOF  Repeat_rs
AS 
$$
Declare someVariableName Repeat_rs;
BEGIN
    For someVariableName in (
        SELECT label, count(*) AS Cnt from test where date between fromDate and toDate group by circle
    ) Loop
    Return Next someVariableName;
    End Loop;
    Return;
END;
$$
LANGUAGE plpgsql;

有没有可能不使用循环就返回行?

如果是这样的话,请与我分享我们如何做到这一点。

我是否能够编写一个函数,在不使用循环的情况下将记录插入到表中?

帮我解决这个问题。

提前谢谢。

共有2个答案

周翰
2023-03-14

您可以使用SELECT查询在表中插入值,如下所示:

CREATE OR REPLACE FUNCTION Repeat(fromDate date,toDate date)
returns VOID 
AS 
$$

BEGIN
    INSERT INTO TABLE_NAME
         SELECT label, count(*) AS Cnt from test where date between fromDate and toDate group by circle
END;
$$
LANGUAGE plpgsql;
朱修真
2023-03-14

您不需要额外的类型定义。要返回多行,请使用返回查询

大概是这样的:

CREATE OR REPLACE FUNCTION Repeat(fromDate date,toDate date)
  returns table (label text, cnt bigint)
AS 
$$
BEGIN
    Return query 
       SELECT label, count(*) AS Cnt 
       from test 
       where date between fromDate and toDate
       group by label;
END;
$$
LANGUAGE plpgsql;

你甚至不需要一个PL/pgSQL函数,你可以使用一个简单的SQL函数:

CREATE OR REPLACE FUNCTION Repeat(fromDate date, toDate date)
  returns table (label text, cnt bigint)
AS 
$$
   SELECT label, count(*) AS Cnt 
   from test 
   where date between fromDate and toDate
   group by label;
$$
LANGUAGE sql;
 类似资料:
  • 问题内容: 我想在PostgreSQL上设置一个返回表的函数。这是该函数的源代码: 调用该函数仅返回一列,并用’,’分隔值: 我期望有不同的列(在函数的开头为表指定的每个值一个),而不仅仅是所有值的列。有谁知道为什么会这样,我该如何解决? 谢谢蒂莫 问题答案: 使用 代替 以获得表格的结果。 (像对待表一样处理该函数。)

  • 问题内容: 我已经写了这个功能: 哪个有效,并在单列记录类型中返回结果。请注意,可能会返回多于一行。 现在的响应是: 我想获得的结果不是记录,而是多列 有没有一种方法可以从PostgreSQL函数返回多列 问题答案: 我可以通过以下查询看到它:

  • 我有一个返回dict对象的函数,我想利用pandas/numpy在数据帧的每一行上为该函数执行列操作/向量化的能力。函数的输入在dataframe中指定,我希望函数的输出成为现有dataframe上的新列。下面是一个例子。 期望输出: 我读了这个答案,大部分内容都是这样的,但是当函数返回一个dict对象,其中包含所需的列名作为dict中的键时,我不太明白该怎么做。

  • 问题内容: 在基本的Postgres函数教程中,有一个带有如下参数的示例: 然后结果看起来像 但是,假设您要在执行连接所产生的列上执行该函数,并且您无权修改该函数或使用替代函数?例如,使用一些玩具数据: 在单列“ hi_lo”中返回具有2元组值的结果。 将查询括在括号中并尝试从中查询不会更改输出的格式。所以 不会影响结果形状。 以下尝试导致错误“子查询必须仅返回一列” 最后,我也尝试过,但是由于元

  • 问题内容: 我想测试Postgres函数的结果(不可能更改函数)。 该函数将REFCURSOR和其他一些内容作为参数接收,并返回相同的RECURSOR。 现在,我想在Postgres中创建一个小测试,以获取此FUNCTION的结果。类似于下面的代码(这是我的方法,但是不起作用): 关于如何使它起作用的任何建议?可用于测试此类函数的通用解决方案(获取游标并返回游标? 如果我们不知道要返回的行类型,我

  • Go语言内置支持多返回值,这个在Go语言中用的很多,比如一个函数同时返回结果和错误信息。 package main import "fmt" // 这个函数的返回值为两个int func vals() (int, int) { return 3, 7 } func main() { // 获取函数的两个返回值 a, b := vals() fmt.Println(a