溯源侵蚀 2021-03-07 18:20 采纳率: 50%
浏览 86

请问:这样的一个查询 对于高效工作是否有实际意义?

如果是有意义的,那是否有改进建议;是否有其他更合适的方法来实现同样或类似的需求/结果?谢谢!

该段代码的运行结果如上:目的是先查询出各来源相应的取消和退货数据。

另外一点疑惑:SQL要实现连续的查询(且互通),只能这样一层一层的嵌套吗?。。。

select 
	od_joined_return.订单来源, 
	sum(od_joined_return.r_s_amt) as rr_s_amt, 
	sum(od_joined_return.r_s_qty) as rr_s_qty, 
        sum(od_grouped_cancel.cancel_amt) as rr_c_amt, 
        sum(od_grouped_cancel.cancel_qty) as rr_c_qty, 
	sum(od_joined_return.r_r_amt) as rr_r_amt, 
	sum(od_joined_return.r_r_qty) as rr_r_qty, 
	(sum(coalesce(od_joined_return.r_s_amt, '0')) - sum(coalesce(od_grouped_cancel.cancel_amt, '0')) - sum(coalesce(od_joined_return.r_r_amt, '0'))) as ns_amt, 
	(sum(coalesce(od_joined_return.r_s_qty, '0')) - sum(coalesce(od_grouped_cancel.cancel_qty, '0')) - sum(coalesce(od_joined_return.r_r_qty, '0'))) as ns_qty 
from 
	(select 
		grouped_od.订单号, 
		grouped_od.创单时间, 
	 	grouped_od.订单来源, 
		sum(grouped_od.sales_amt) as r_s_amt, 
		sum(grouped_od.sales_qty) as r_s_qty, 
		sum(od_grouped_return.return_amt) as r_r_amt, 
		sum(od_grouped_return.return_qty) as r_r_qty 
	from 
		(select 
 			order_line.订单号, 
 			order_line.创单时间, 
		 	order_line.订单来源, 
 			sum(order_line.商品总价(元)) as sales_amt, 
 			sum(order_line.数量) as sales_qty 
		from order_line 
		where (order_line.财务状态 = '已付款' or order_line.付款方式 = '货到付款') 
		and order_line.创单时间 between '2021-01-01 00:00:00' and '2021-03-01 00:00:00' 
		group by order_line.订单号, order_line.创单时间, order_line.订单来源) as grouped_od 
	left join 
		(select 
 			re_refund.原订单号, 
 			re_refund.创建时间, 
 			sum(re_refund.应退总金额) as return_amt, 
 			sum(re_refund.退货数量) as return_qty 
		from re_refund 
		where re_refund.创建时间 between '2021-01-01 00:00:00' and '2021-03-01 00:00:00' 
		group by re_refund.原订单号, re_refund.创建时间) as od_grouped_return 
	on grouped_od.订单号 = od_grouped_return.原订单号 
	group by grouped_od.订单号, grouped_od.创单时间, grouped_od.订单来源) as od_joined_return 
left join 
	(select 
		order_line.订单号, 
		sum(order_line.商品总价(元)) as cancel_amt, 
		sum(order_line.数量) as cancel_qty 
	from order_line 
	where (order_line.财务状态 = '已付款' or order_line.付款方式 = '货到付款') 
	and order_line.创单时间 between '2021-01-01 00:00:00' and '2021-03-01 00:00:00' 
	and order_line.订单行状态 in ('会员取消', '系统取消') 
	group by order_line.订单号) as od_grouped_cancel 
on od_joined_return.订单号 = od_grouped_cancel.订单号 
group by od_joined_return.订单来源 
;
  • 写回答

1条回答 默认 最新

  • 憧憬blog 2023-03-14 23:00
    关注

    对于这样一个查询,在高效工作方面是有实际意义的,因为它可以帮助用户快速地得到各个来源的取消和退货数据,并计算出销售净额和销售净量等信息。在实际业务中,这些数据对于企业的经营决策和业务分析都具有重要的参考价值。

    至于是否有改进建议,可以考虑以下几点:

    1. 可以尝试通过索引优化查询,加快查询速度。

    2. 可以考虑将查询拆成多个步骤,每个步骤只关注特定的数据范围和计算逻辑,以避免嵌套查询过深,降低查询效率的问题。

    3. 可以根据实际需求调整查询条件和结果集的字段,以便更好地满足业务需求。

    关于 SQL 实现连续的查询(且互通),不一定只能通过嵌套查询来实现。还可以使用联接(JOIN)操作、子查询(SUBQUERY)等方式来实现。具体实现取决于具体的业务需求和数据结构。

    评论

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建