数据库如何将表的某一列所有值用逗号隔开去重后合并成一行 oracle ->LISTAGG ;mysql ->group_concat
listagg函数 【返回结果为varchar2格式的数据,即拼接后的字符串最大可以保存4000字节的数据】
SELECT
LISTAGG(student_name,',') WITHIN GROUP(ORDER BY student_name) FROM
student_info t;
xmlagg【当查询结果过长,拼接的字符串长度过长大于4000字节,我们可以使用这个函数,函数返回结果为CLOB类型,大对象数据类型最大可以存储4GB的数据长度。】
SELECT
xmlagg(xmlparse(content t.student_name ||',' WELLFORMED).getclobval() order by t.student_name
FROM
student_info t;
xmlagg函数
select xmlagg(xmlparse(content 查询拼接字段 || ','wellformed) order by 排序字段).getclobval() as 查询显示字段
from 表名 where 条件
MYsql 中使用分组合并函数
SELECT * from (
SELECT
rh.id,
h.description,
h.houseNumber,
h.houseType,
h.houseCode,
h.id houseId,
rh.residentName,
rh.sex,
rh.phone,
rh.tel,
rh.cardNo,
rh.address,
rh.houseAttendantDate,
rh.beginDate,
rh.endDate,
rh.createDate,
rh.creator,
rh.editor,
rh.updateDate,
rh.residentType,
rh.hasChargeStandard,
rh.rentalStatus,
rh.state,
rh.remark,
(SELECT group_concat(l.icon separator '#') from pm_label l LEFT JOIN pm_resident_label rl ON rl.label_id=l.id where rl.residentHouse_id=rh.id) label
FROM pm_resident_house rh
LEFT JOIN pm_house_info h ON h.id=rh.house_id
WHERE rh.state=1
)tab WHERE 1=1