在Postgres函数循环中使用RAISE NOTICE访问sql聚合方法结果

时间:2013-04-01 14:49:00

标签: postgresql

在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;

所以,基本上,它只是让我失望的聚合部分。如何在聚合函数的结果上调用RAISE NOTICE?

我知道我可以将整个统计记录传递给RAISE NOTICE并获得括号结果,但我认为必须有办法隔离每个汇总结果。

我尝试了COUNT()AS和LENGTH()AS,但我仍然不确定我是否可以将这些“as”变量传递给RAISE NOTICE。

1 个答案:

答案 0 :(得分:3)

给结果一个标识符:

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不是聚合函数;