mysql训练逻辑题(1)
首先看一下题目的是什么?
这个题目其实不难理解,看下这个题心里有个初步的思路通过concat将列连接起来,再通过group_concat将列基于用户号进行聚合
首先导入数据
create table b( userid int, cj varchar(50), ft varchar(50) ); insert into b values(1,‘1001‘,‘1400‘); insert into b values(2,‘1002‘,‘1401‘); insert into b values(1,‘1002‘,‘1402‘); insert into b values(1,‘1001‘,‘1402‘); insert into b values(2,‘1003‘,‘1403‘); insert into b values(2,‘1004‘,‘1404‘); insert into b values(3,‘1003‘,‘1400‘);
简单看一下数据
场景重复的话,选择最早的时间
select userid,cj,min(ft) ft from b group by userid,cj;
你认真查看结果其实就是要每个userid的前两条记录,这让我们想起了排名函数
select concat(userid,‘-‘,group_concat(cj separator‘-‘))as ppp from ( select userid,cj,rank() over(partition by userid order by cj)as pm from ( select userid,cj,min(ft) ft from b group by userid,cj order by userid,cj )t )t1 where t1.pm<=2 group by userid;