plpgSQL函数循环和string_agg

问题描述

我提出了以下循环,它是函数的一部分。该循环实现以下目的: 第一行是名称和年份 以下几行是电影及其角色。 如果他/她只有一个角色,那么这很简单。

在第二种情况下,Graham在同一部电影中有3个字符。我知道我需要使用string_agg来执行此操作,但是我不确定如何在此处循环执行以达到所需的结果,如下所示。请帮助我进行此编码。

loop
    if counter = 0 then
        return next concat(_result.name,' (',_result.year_born,'-',_result.year_died,')');
    end if;
    return next _result.title || ' (' || _result.year_made || ') ' || 'as ' || _result.character;
    counter = counter + 1;
end loop;

从q12('marlon brando')中选择*;


马龙·白兰度(1924-2004) 名为Desire的有轨电车(1951),名字叫Stanley Kowalski 在海滨(1954)饰演Terry Malloy 教父(1972)作为唐·维托·科里昂(Don Vito Corleone) 《现代启示录》(1979年)饰演Walter E.Kurtz上校 黑暗之心:电影制片人的示录(1991) (6行)

从q12中选择*(“格雷厄姆·查普曼”);


格雷厄姆·查普曼(1941-1989) 蒙蒂·蟒蛇与圣杯(1975)饰演亚瑟王,上帝之声中头 (2行)

这是格雷厄姆·查普曼的理想结果。 矿井代码具有以下结果:

从q12中选择*(“格雷厄姆·查普曼”);


格雷厄姆·查普曼(1941-1989) 蒙蒂·蟒蛇与圣杯(1975)饰演亚瑟王 蒙蒂·蟒和圣杯(1975):上帝之声 蒙蒂·蟒蛇和圣杯(1975):中尉 (4行)

select title,string_agg(character,',' order by character)
                from people p1
                join plays p2
                on p1.id = p2.person_id
                join movies m
                on p2.movie_id = m.id
                where name ilike 'Graham Chapman'
                group by title;
          title              |              string_agg              

蒙蒂巨蟒与圣杯|亚瑟王中头上帝之音 (1行)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)