我正在寻找一种方法,通过查询连接组内字段的字符串。例如,我有一个表格:
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允许你用CREATE aggregate定义你自己的聚合函数
PostgreSQL列表上的这篇文章展示了创建一个函数来做所需的事情是多么简单:
CREATE AGGREGATE textcat_all(
basetype = text,
sfunc = textcat,
stype = text,
initcond = ''
);
SELECT company_id, textcat_all(employee || ', ')
FROM mytable
GROUP BY company_id;
你也可以使用format函数。它本身也可以隐式地处理text、int等类型转换。
create or replace function concat_return_row_count(tbl_name text, column_name text, value int)
returns integer as $row_count$
declare
total integer;
begin
EXECUTE format('select count(*) from %s WHERE %s = %s', tbl_name, column_name, value) INTO total;
return total;
end;
$row_count$ language plpgsql;
postgres=# select concat_return_row_count('tbl_name','column_name',2); --2 is the value