Groupby分组,为分组后的数据添加序号
需求如下:
根据两个⽇期区间查询出两个查询列表,表1、表2。并根据⽇期,以及名称进⾏group by,并合并数量本期数量、同期数量。其中查询出来的数据,可能表2不存在表1的⽇期,所以不能⽤时间来合并数据。幼儿园评语
SQL代码如下:
lect
<,t.orders,t.date,
sum(ca when t.b_cn ='b_cn'then0el t.b_cn end) b_cn,
sum(ca when t.t_cn ='t_cn'then0el t.t_cn end) t_cn
如何画孙悟空from(,a.rownum orders,a.date,a.b_cn,'t_cn'from(lect b.*,@rownum:=ca when@ then@rownum+1el1end rownum,@cyr:=b. cyr from(lect cyr,right(date,2)+0date,sum(jcn) b_cn from tables_1
点正
where date between'2021-03-01'and'2021-03-31'group by cyr,date) b,(lect@rownum:=0,@cyr:=null) r)a
union all
,b.rownum orders,b.date,'b_cn',b.t_cn from(
lect b.*,@rownum:=ca when@ then@rownum+1el1end rownum,@cyr:=b.cyr from(lect cyr,right(date,2)+0date,sum(jcn) t_cn from ta bles_1
where date between'2020-03-01'and'2020-03-31'group by cyr,date) b,(lect@rownum:=0,@cyr:=null) r) b) t group by cyr,orders
SQL语句拆解
1、先查询出需要进⾏排序的语句,作为临时的主体表。
SQL1:
lect b.*,@rownum:=ca when@ then@rownum+1el1end rownum,@cyr:=b.cyr from(lect cyr,right(date,2)+0date,sum(jcn) t_cn from ta bles_1
where date between'2020-03-01'and'2020-03-31'group by cyr,date) b,(lect@rownum:=0,@cyr:=null) r
2、再使⽤
戴字的笔顺lect @rownum:=0,@cyr:=null
设置默认⾏号以及临时字段
3、最后使⽤CASE WHEN 语句,判断表中的cyr是否等于@cyr。人蛇之恋
再对@rownum进⾏逻辑计算即可。
@rownum:=ca when @ then @rownum+1 el 1 end
由于需要进⾏对⽐,查询条件也不⼀样,所以使⽤union all拼接。
但是若直接拼接的话,就没办法区别哪个是当期的,哪个是同期的。下完这场雨后弦
所以两个SQL语句中,都添加了⼀个临时的字段。
ca when t.b_cn ='b_cn' then 0 el t.b_cn en
再使⽤语句将其转换,再对数据进⾏合并,即可获取到正确的数据。自我介绍300字左右
植物大战僵尸粘土以上的⼯作中遇到的需求简化。
此前以运⽤其他的⽅法完成了该需求,但是效率感⼈,容错率较低。
所以采取本⽅法。