在Postgres函数中,我试图遍历一个select语句,该语句使用各种聚合函数,如count()和length()。就像这样:

    DECLARE stats RECORD;
    FOR stats IN SELECT length(something), count(something_else) from widgets LOOP
    END LOOP;

在这个循环中,我想对结果调用RAISE NOTICE。
通常(如果我不使用聚合函数),我会执行以下操作:
    FOR stats IN SELECT something, something_else from widgets LOOP
       RAISE NOTICE '% %', something, something_else;
    END LOOP;

所以,基本上,是总的部分让我失望。如何调用对聚合函数的结果发出通知?
我知道我可以将整个stats记录传递到RAISE NOTICE并得到一个括号内的结果,但我想必须有一种方法来隔离每个聚合结果。
我尝试了COUNT()AS和LENGTH()AS,但仍然不确定是否可以将这些“AS”变量传递给RAISE NOTICE。

最佳答案

为结果提供标识符:

FOR stats IN
    SELECT length(something) something, count(something_else) something_else
    from widgets
    group by 1
loop
    RAISE NOTICE '% %', stats.something, stats.something_else;
END LOOP;

但是请注意,您将需要使用group bycount,因为length不是聚合函数;

关于postgresql - 在Postgres函数循环中使用RAISE NOTICE访问sql聚合方法结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15745655/

10-10 16:58