sql题 用sql实现从A到B,从A到C

文章讲述了如何使用SQL技巧,如windowfunction和分组,从表A到B聚合name并获取最大ID,以及从A到C根据ID顺序分段聚合name。

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

用sql实现从A到B,从A到C

请添加图片描述
从A到B,我们可以看出B是将相同的name进行了聚合并且id取最大的,首先我们想到开窗函数。假设表A为test

select max_id,group_concat(name SEPARATOR '|')   from (
select  id,name,max(id) over(partition by name) as max_id from test
)t group by max_id

实现如下:请添加图片描述

从A到C的实现,我们首先观察可以发现id为1到3 的先进行了聚合并对name进行了拼接,随后id为4和5的分别进行聚合,因为各自只有一个对应的name,id为6和7的name相同所以对name进行拼接。

select max_id,group_concat(name  SEPARATOR '|') as namconcat from (
select name,tt,max(id)over(partition by tt) as max_id from(
select id
       ,name
       ,sum(if (name!= lagname , 1,'0')) over(order by cast(id as SIGNED)) as tt
       from(
select id
      ,name
      ,lag(name,1,'00') over(order by cast(id as SIGNED)) as lagname from test_20230817
      )t
      )s
      )p 
      group by 1 

结果如下:
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇智波天坪小梁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值