如何检索特定行的列值

时间:2014-09-26 07:57:39

标签: sql postgresql plpgsql

我正在使用PostgreSQL 9.3。

partner.partner_statistic包含以下列:

  id     reg_count
serial    integer

我编写了函数convert(integer):

CREATE FUNCTION convert(d integer) RETURNS integer AS $$
BEGIN
--Do something and return integer result
END
$$ LANGUAGE plpgsql;

现在我需要编写一个函数返回的整数数组,如下所示:

 CREATE FUNCTION res() RETURNS integer[] AS $$
    << outerblock >>
    DECLARE
        arr integer[]; --That array of integers I need to fill in depends on the result of query
        r partner.partner_statistic%rowtype;
        table_name varchar DEFAULT 'partner.partner_statistic';
    BEGIN
        FOR r IN 
        SELECT * FROM partner.partner_statistic offset 0 limit 100
        LOOP
        --
        -- I need to add convert(r[reg_count]) to arr where r[id] = 0 (mod 5)
        --
        -- How can I do that?
        END LOOP;
        RETURN;
    END;
    $$ LANGUAGE plpgsql;

1 个答案:

答案 0 :(得分:3)

您不需要(也不应该使用)PL / PgSQL循环。只需使用聚合。我猜你的意思是“where r[id] = 0 (mod 5),但我假设你的意思是”其中id可以被5“整除。”(请注意,这不是一回事as “每隔五行”,因为生成的ID有间隙)。

类似的东西:

SELECT array_agg(r.reg_count) 
FROM partner.partner_statistic
WHERE id % 5 = 0
LIMIT 100

可能满足您的需求。

如果要返回值,请使用RETURN QUERY SELECT ...或最好使用简单的sql语言函数。

如果需要动态表名,请使用:

  RETURN QUERY EXECUTE format('
    SELECT array_agg(r.reg_count) 
    FROM %I
    WHERE id % 5 = 0
    LIMIT 100', table_name::regclass);