0

在 Postgres 函数中,我试图循环使用各种聚合函数(例如 count() 和 length())的 select 语句。像这样:

    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。

4

1 回答 1

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 byto,count因为length它不是聚合函数;

于 2013-04-01T14:57:31.610 回答