如何通过’query’连接PostgreSQL组中的字符串字符串?
我正在寻找一种方法来通过查询来连接组中的字段的字符串。例如,我有一个表:
ID COMPANY_ID EMPLOYEE 1 1 Anna 2 1 Bill 3 2 Carol 4 2 Dave 并且我想通过company_id分组,得到像: COMPANY_ID EMPLOYEE 1 Anna,Bill 2 Carol,Dave 在mySQL中有一个内置函数来做这个group_concat
从PostgreSQL 9.0开始更新:
最新版本的Postgres(自2010年底开始)具有 SELECT company_id,string_agg(employee,',') FROM mytable GROUP BY company_id; 更新为PostgreSQL 8.4: PostgreSQL 8.4(2009年)引入了the aggregate function SELECT company_id,array_to_string(array_agg(employee),') FROM mytable GROUP BY company_id; 原始答案(对于8.4之前的PostgreSQL): 没有内置的聚合函数来连接字符串。看起来这是需要的,但它不是默认设置的一部分。然而,网络搜索揭示了一些手动实现the same example: CREATE AGGREGATE textcat_all( basetype = text,sfunc = textcat,stype = text,initcond = '' ); Here is the 为了获得插入在它们之间的“,”,而不是在它们的末尾,你可能想要自己的连接函数,并将其替换为上面的“textcat”。这是一个我放在一起,但没有测试(更新:测试在8.3.12和工作正常): CREATE FUNCTION commacat(acc text,instr text) RETURNS text AS $$ BEGIN IF acc IS NULL OR acc = '' THEN RETURN instr; ELSE RETURN acc || ',' || instr; END IF; END; $$ LANGUAGE plpgsql; 注意:上面的函数将输出一个逗号,即使该行中的值为null / empty,它输出: a,b,c,e,g 如果你想删除额外的逗号输出: a,g 只需添加一个ELSIF检查到函数: CREATE FUNCTION commacat_ignore_nulls(acc text,instr text) RETURNS text AS $$ BEGIN IF acc IS NULL OR acc = '' THEN RETURN instr; ELSIF instr IS NULL OR instr = '' THEN RETURN acc; ELSE RETURN acc || ',' || instr; END IF; END; $$ LANGUAGE plpgsql; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |