Oracle函数listagg的作用

目的:实现数据压缩

listagg可以实现将多列记录聚合为一列

listagg(measure_expr,delimiter) within group ( order by 字段) 你的别名;

用法介绍:measure_expr可以是基于任何列的表达式

  delimiter分隔符,默认为NULL,通常用 , 

  

--mybatis编写SQL
    
    select  b1.id Id ,
            b1.name Name,
            listagg(b2.name , ',') within group (order by b1.id desc) Detail
    from bs_left_name_table b1
           left join bs_right_name_table b2 on b1.id = b2.id
    where 1=1
            <if test="Name != null  and Name !='' ">
                and b1.name = #{Name,jdbcType=VARCHAR}
            </if>
    group by  b1.id  , b1.name
    order by b1.id desc

--以上一共显示三列分别是 ID , name , Detail ,第三列就是合并列,根据,合并

PS:
left join 会把左表没有关联的数据都显示出来,比如
bs_left_name_table 共有10条数据,bs_right_name_table 共有6条数据,其中5条是可以关联上的
用left join后最终会出现10条数据,其中5条是bs_right_name_table 表关联的数据

 

 效果图,有多个,拼接

 

Oracle中的LISTAGG函数是一个字符串聚合函数,它将一组行的列值组合成单个字符串,这些值可以通过逗号、空格或其他指定的分隔符分隔。这个函数非常适合将多个行的数据合并成一个字段的格式,用于报表或导出数据时非常有用。 LISTAGG函数的基本语法如下: ```sql LISTAGG(字段名, 分隔符) WITHIN GROUP (ORDER BY 排序字段名 [ASC|DESC]) ``` - `字段名` 是你想要聚合成字符串的列名。 - `分隔符` 是用来分隔各个值的字符或字符串。 - `ORDER BY 排序字段名` 指定了合并值之前需要排序的列名。可以使用 `ASC` 或 `DESC` 来指定升序或降序排序。 - `WITHIN GROUP` 是聚合函数的一个子句,用于定义排序的顺序。 下面是一个简单的例子: ```sql SELECT employee_id, LISTAGG(last_name, ', ') WITHIN GROUP (ORDER BY last_name) AS last_name_list FROM employees GROUP BY employee_id; ``` 在这个例子中,我们对 `employees` 表中的 `employee_id` 进行分组,并将每个组内的 `last_name` 按字母顺序排序后,使用逗号加空格作为分隔符合并成一个字符串,然后将这个字符串命名为 `last_name_list`。 使用LISTAGG函数时要注意的一点是,如果所有行转换成一个字符串后超过了Oracle的字符串限制长度,你将收到一个错误。Oracle中的最大字符串长度通常是4000字节,但可以通过设置初始化参数 `MAX_STRING_SIZE` 为 `EXTENDED` 来使用更长的字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值