表连接问题,请各位帮我看看代码

我写数据集求同比

select  T1.orderTime,

t1.PROVINCE,

       t1.CITY,

       t1.num 本期订单量,

       t2.num 上期订单量,

       round(t1.num/t2.num-1,4) 同比

from (select *

from 

(

select cast(orderTime as date)orderTime,

province,

city,

num

from

(

select concat('20',from_unixtime(o.created , '%y-%m-%d')) as orderTime,o.province,o.city,count(o.city) num

 from `order` o join shop sh on o.shop_id=sh.id 

 where 1=1  

 /*and o.status=99 订单完成*/

 and pay_status=2 /*支付成功*/

 group by orderTime,o.province,o.city

 having num>0 

)aa

)bb

where orderTime between '${tstart1}' and '${tend1}'

)t1

left join (select *

from 

(

select cast(orderTime as date)orderTime,

province,

city,

num

from

(

select concat('20',from_unixtime(o.created , '%y-%m-%d')) as orderTime,o.province,o.city,count(o.city) num

 from `order` o join shop sh on o.shop_id=sh.id 

 where 1=1  

 /*and o.status=99 订单完成*/

 and pay_status=2 /*支付成功*/

 group by orderTime,o.province,o.city

 having num>0 

)aa

)bb

where orderTime between '${YEARDELTA(tstart1,-1)}' and '${YEARDELTA(tend1,-1)}'

)t2

on t1.PROVINCE=t2.PROVINCE

    and t1.CITY=t2.CITY

正确的数据应该是这样的:

9aeb9009773b9206bf5d713e19f996f.png

左连接以后 数据变成了这样

69ef9fd31636aefb0c04b1abff8c00c.png

百煮味香 发布于 2022-5-11 10:29
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
shinger@126.comLv2见习互助
发布于2022-5-11 11:23

T1和T2少了日期关联条件,你这个是为了查每天的数据和上年同一天的历史数据吗?

  • 百煮味香 百煮味香(提问者) 是的
    2022-05-11 11:33 
  • 百煮味香 百煮味香(提问者) 果然如此 谢谢你
    2022-05-11 11:34 
  • shinger@126.com shinger@126.com 回复 百煮味香(提问者) 你这代码要优化,可读性太差。而且同比值一般不在数据库返回,由报表设置公式来计算即可,数据集只需返回本期订单数和上期订单数即可
    2022-05-11 12:00 
最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-5-11 10:31

没得数据源表看不出

  • 2关注人数
  • 293浏览人数
  • 最后回答于:2022-5-11 11:23
    请选择关闭问题的原因
    确定 取消
    返回顶部