Postgre中按某字段合并记录

        在postgre数据中有张表,编号存在重复:

        现在需要将重复编号的记录按编号合并成一条,如下:

        在postgre中可通过函数 array_agg和array_to_string来实现,具体如下:

create table ccc as 
select
	bh,
	array_to_string(array_agg(xzqdm), '、') as xzqdm,
	array_to_string(array_agg(xzqmc), '、') as xzqmc
from
	aaa
group by 
	bh;
	

解释:

一、array_agg 函数

作用:将多行数据聚合为一个数组。
语法array_agg(expression [ORDER BY ...])
特点

  1. 支持对字段值分组后合并为数组形式,常用于 GROUP BY 分组查询。
  2. 可搭配 ORDER BY 对合并结果排序。
  3. 结果类型为数组(如 integer[]text[] 等)。

示例

-- 按部门分组,合并员工姓名到数组 
SELECT department_id, array_agg(employee_name ORDER BY hire_date) 
FROM employees 
GROUP BY department_id;

二、array_to_string 函数

作用:将数组转换为字符串,并用指定分隔符连接元素。
语法array_to_string(array_expression, delimiter)
特点

  1. 直接处理数组类型数据,输出字符串。
  2. 常用于将 array_agg 的结果转换为易读的文本格式。

示例

-- 将数组转换为逗号分隔的字符串 
SELECT array_to_string(ARRAY['a', 'b', 'c'], ', '); 
-- 输出 'a, b, c'

三、组合用法

典型场景:将分组后的多行字段值合并为单一字符串。
示例

-- 按部门分组,合并员工姓名为逗号分隔的字符串

SELECT department_id,

array_to_string(array_agg(employee_name ORDER BY hire_date), ', ')

FROM employees

GROUP BY department_id;

四、进阶用法

  1. 去重与排序

    -- 去重后合并为字符串 
    SELECT array_to_string(array_agg(DISTINCT subject), '; ') 
    FROM courses;
  2. 嵌套使用数组索引

    -- 获取数组中第一个元素 
    SELECT (array_agg(score))[1] FROM exams;
  3. 性能优化
    当处理大规模数据时,直接使用 array_agg 可能导致性能问题(因内存拷贝),可考虑替代方案如 unnest 结合字符串处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值