listagg 字符串连接的结果过长问题解决

本文分享了一次SQL查询优化的经验,对比了使用listagg和xmlagg函数在数据聚合方面的效果,通过实际案例展示了如何针对特定需求调整SQL语句,实现更高效的数据检索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原sql

SELECT
  id agentId,
  AGENCYNAME agencyname,
  listagg(region, ',')
  WITHIN GROUP (
   ORDER BY AGENCYNAME) AS region



		--	xmlagg(xmlparse(content region||',' wellformed) order by AGENCYNAME).getclobval() AS region


FROM (

  SELECT
    t4.id,
    t4.AGENCYNAME,
    t4.REGIONNAME2 || '-' || t4.REGIONNAME region
  FROM (

         SELECT
           t.AGENCYNAME,
           t.id,
           t2.REGIONNAME,
           t3.REGIONNAME REGIONNAME2
         FROM STANIC_AGENCY t
           LEFT JOIN STANIC_AGENCYREGION t1
             ON t1.AGENCYID = t.ID
           INNER JOIN STANIC_REGION t2
             ON t1.CITYID = t2.ID
           LEFT JOIN STANIC_REGION t3
             ON t1.PROVINCEID = t3.ID

         WHERE t.PARENTID = '12b234'
			and t.status=1 and t.delflag=0
       ) t4

)
GROUP BY AGENCYNAME, id

修改后sql

	
SELECT
  id agentId,
  AGENCYNAME agencyname,
  --listagg(region, ',')
 -- WITHIN GROUP (
  --  ORDER BY AGENCYNAME) AS region



			xmlagg(xmlparse(content region||',' wellformed) order by AGENCYNAME).getclobval() AS region


FROM (

  SELECT
    t4.id,
    t4.AGENCYNAME,
    t4.REGIONNAME2 || '-' || t4.REGIONNAME region
  FROM (

         SELECT
           t.AGENCYNAME,
           t.id,
           t2.REGIONNAME,
           t3.REGIONNAME REGIONNAME2
         FROM STANIC_AGENCY t
           LEFT JOIN STANIC_AGENCYREGION t1
             ON t1.AGENCYID = t.ID
           INNER JOIN STANIC_REGION t2
             ON t1.CITYID = t2.ID
           LEFT JOIN STANIC_REGION t3
             ON t1.PROVINCEID = t3.ID

         WHERE t.PARENTID = 'edb'
			and t.status=1 and t.delflag=0
       ) t4

)
GROUP BY AGENCYNAME, id



测试完美解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值