我想创建一个聚合我的列" 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版本。
提前多多感谢!
答案 0 :(得分:1)
您可以使用子查询删除重复记录并使用它们创建数组。如果要将国家/地区集合存储为以逗号分隔的文本,请使用函数ARRAY_TO_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
来运行包含多个列的DISTINCT ON (colmun1, column2, ...)
。
答案 1 :(得分:1)
只需在distinct
内添加string_agg
:
string_agg(distinct country, ', ')