string_agg没有函数匹配给定的名称

时间:2015-11-15 08:02:48

标签: postgresql

我有关系数据库,并希望使用string_agg(),因为它似乎符合我的需要。

我想:

product_id | quiz_id
-----------+----------
         1 | 1,6
         2 | 2,7
         3 | 3,8
         4 | 4

这是我的数据库。

    select quiz_id , product_id, lastmodified from dugong.quiz;
 quiz_id | product_id |         lastmodified          
---------+------------+-------------------------------
       1 |          1 | 2015-11-11 14:46:55.619162+07
       2 |          2 | 2015-11-11 14:46:55.619162+07
       3 |          3 | 2015-11-11 14:46:55.619162+07
       4 |          4 | 2015-11-11 14:46:55.619162+07
       5 |          5 | 2015-11-11 14:46:55.619162+07
       6 |          1 | 2015-11-11 14:46:55.619162+07
       7 |          2 | 2015-11-11 14:46:55.619162+07
       8 |          3 | 2015-11-11 14:46:55.619162+07

我的尝试:
参考文件。 How to concatenate strings of a string field in a PostgreSQL 'group by' query? http://www.postgresql.org/docs/current/static/sql-expressions.html#SYNTAX-AGGREGATES

select product_id , string_agg(quiz_id, ',' order by lastmodified) from dugong.quiz;
ERROR:  function string_agg(integer, unknown) does not exist
LINE 1: select product_id , string_agg(quiz_id, ',' order by lastmod...
                            ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.


Postgres版本:
PostgresApp 9.4.4.1

更新:
@代码和尚 它仍然是错误的。

select product_id , string_agg(quiz_id::int, ',' order by lastmodified) from dugong.quiz;
ERROR:  function string_agg(integer, unknown) does not exist
LINE 1: select product_id , string_agg(quiz_id::int, ',' order by la...
                            ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

问题:
我的查询出了什么问题?

1 个答案:

答案 0 :(得分:42)

试试这个:

String_agg

quiz_id函数仅适用于String值,您收到错误,因为character varying是整数。

我已将其转换为JSON.stringify(fruits); 并添加了分组,以便明智地对数据产品ID进行分组。

SQL小提琴示例:http://sqlfiddle.com/#!15/9dafe/1