在Oracle中id去重取最大值

一、创建Oracle表

       在Oracle中创建getmaxnum表

create table getmaxnum(
    id nvarchar2(20),
    num nvarchar2(30),
    name nvarchar2(50)
);

二、添加数据

     在表中插入数据

insert into getmaxnum values('1','2','zhangsan');
insert into getmaxnum values('1','3','lisi');
insert into getmaxnum values('2','1','wangwu');
insert into getmaxnum values('2','4','zhaoliu');
insert into getmaxnum values('3','5','tianqi');
insert into getmaxnum values('3','6','wuming');
insert into getmaxnum values('3','6','wuming');
insert into getmaxnum values('3','1','wuming');

                                                                 

三、业务需求

            获取每个id中num最大的数据,比如:在id为1的数据中,要求最终查询的数据是 num 为3 的数据

四、执行sql

select distinct(bb.num),bb.id,bb.name from (select max(num) num ,id  from getmaxnum group by id) aa left join getmaxnum bb on aa.num = bb.num 

1. 通过group by 去重,因为在使用group by 去重时,可以使用max等函数,获取id的同时,获取每个id对应的最大num

2. 然后通过左连接 ,查询num相同的数据

3.因为查出的数据中有num最大值重复,使用distinct去重

Oracle,可以使用listagg函数将多行数据合并成一行,并且可以指定分隔符。然而,当使用listagg函数时,可能会出现重复数据的问题。为了解决这个问题,可以采用以下几种方法: 1. 使用DISTINCT关键字:在listagg函数内部使用DISTINCT关键字可以去除重复的数据。例如: SELECT listagg(column_name, ',') WITHIN GROUP (ORDER BY column_name) FROM table_name; 2. 使用子查询去重:可以使用子查询来先去除重复的数据,然后再使用listagg函数进行合并。例如: SELECT listagg(column_name, ',') WITHIN GROUP (ORDER BY column_name) FROM (SELECT DISTINCT column_name FROM table_name); 3. 使用正则达式替换:可以使用正则达式替换函数regexp_replace来去除重复的数据。例如: SELECT regexp_replace(listagg(column_name, ',') WITHIN GROUP (ORDER BY column_name), '(\[^,\]+)(,\1)+', '\1') FROM table_name; 这些方法可以根据具体的需求选择使用,以实现在listagg函数去除重复数据的目的。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [Oracle listagg去重distinct三种方法总结](https://blog.csdn.net/Weixiaohuai/article/details/84998212)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [oracle的 listagg() 函数及数据的去重!!](https://blog.csdn.net/qq_45498460/article/details/118545865)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值