Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql如何连接字符串,但仅当值不同时才连接?_Postgresql_Postgresql 9.4 - Fatal编程技术网

Postgresql如何连接字符串,但仅当值不同时才连接?

Postgresql如何连接字符串,但仅当值不同时才连接?,postgresql,postgresql-9.4,Postgresql,Postgresql 9.4,我想创建一个视图来聚合我的列“country”。我的桌子看起来像这样: project_ref | country ---------------------- 1 | Italy 1 | Italy 2 | France 2 | Italy 目前,我运行以下查询: CREATE VIEW a AS SELECT project_ref, string_agg(country, ', ') AS country F

我想创建一个视图来聚合我的列“country”。我的桌子看起来像这样:

project_ref | country
----------------------
1           | Italy
1           | Italy
2           | France
2           | Italy
目前,我运行以下查询:

CREATE VIEW a AS
SELECT project_ref,
string_agg(country, ', ') AS country
FROM b GROUP BY project_ref ORDER BY project_num ASC;
结果我得到了下表:

project_ref | country
----------------------------
1           | Italy, Italy
2           | France, Italy
是否有办法删除重复的值“意大利,意大利”,以便只提及一次“意大利”

我想要下表:

project_ref | country
---------------------------
1           | Italy
2           | France, Italy
但是我找不到去那里的路。。。有什么想法吗

我使用的是PostgreSQL 9.4.5版本


提前多谢

您可以使用子查询删除重复记录并使用它们创建数组。如果要将国家/地区集合存储为逗号分隔的文本,请使用函数
ARRAY\u to\u STRING
,如下所示:

CREATE VIEW a AS
SELECT project_ref, 
ARRAY_TO_STRING(ARRAY(SELECT DISTINCT country 
                      FROM b q2 
                      WHERE q1.project_ref = q2.project_ref),',') AS country
FROM b q1 
GROUP BY project_ref
这是您的视图,没有重复项:

db=# SELECT * FROM a;
 project_ref |    country 
-------------+-----------------
           1 | Italy
           2 | France,Italy
(2 Zeilen)

这种方法的一个优点是,您可以通过使用
DISTINCT ON(colmun1,column2,…)
string\u agg
中添加
DISTINCT
,使用多个列运行
DISTINCT

string_agg(distinct country, ', ')

选择不同的…?谢谢!它非常适合删除重复项,但当值不同时,它会复制我的记录数。所以我要法国和意大利两次。