Oracle clob大字段类型group by分组的实现方式

今天遇到oracle 中clob 类型是无法进行group by的问题,但是有需要分组,在网上找了找,总结出两种解决办法

  1. clob字段小于4000

  1. clob字段无限制,但是比较麻烦,效率不敢保证

根据一下例子展示具体实现方式:

表 TEST 存在 两个字段 id varchar2(32) ,txt clob

第一种方式(txt小于4000 ):

SELECT to_char(txt),count(id) FROM TEST  GROUP BY char(txt)

思路:将clob字段转为varchar

第二种方式:

WITH 
    b AS (
        SELECT txt,ROWNUM AS groupNum
        FROM (
            SELECT 
                txt,
                ROW_NUMBER() OVER ( PARTITION BY txt ORDER BY id DESC) AS RW 
            FROM TEST 
        )
        WHERE RW = 1
    )
SELECT b.txt,c.cnt
FROM (
        SELECT COUNT(a.id) AS cnt,b.groupNum
        FROM 
            TEST a,b
        WHERE 
            a.txt = b.txt
        GROUP BY b.groupNum
    ) c,b
WHERE 
    b.groupNum = c.groupNum

思路:

  1. 通过PARTITION BY对相同txt的值进行排序,然后选取第一条,即完成对txt的去重,并进行编号groupNum

  1. 每个不同的编号groupNum代表不同的txt,即实现以groupNum代替大字段txt

  1. 通过txt关联自身TEST,通过groupNum进行分组统计得到统计值cnt

  1. 以groupNum关联 b,得到统计值cnt与大字段txt的关系

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值