开发者学堂课程【新电商大数据平台2020最新课程:电商项目之交易订单明细流水表 SQL 实现(下)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/640/detail/10534
电商项目之交易订单明细流水表 SQL 实现(下)
我们可以看到交易订单明细流水表中需要知道支付次数,那我们如何判断是否支付?
我们需要找到订单支付记录表,可以看到表里有一个支付状态,一个是支付成功,一个是支付失败。
支付成功等于1,支付失败等于0,那我们取值支付次数的时候是不能统计失败的,只能统计成功的。
如果这里没有给一个硬性的要求,比如说一定会成功,一定会失败;交易订单明细流水表里只是说支付次数,不计入失败成功,不考虑其他因素,就可以随意统计,可以不用加入判断。
但是如果加上了判断,表中要得到的信息是支付成功的次数,那在这里就需要取成功的次数。交易订单明细流水表中没有说取成功失败,就是默认都行。
接下来,我们直接统计看到的就可以。上一个表的结尾加上逗号,把后续的 sql 补全,再写一个流水表。
我们查询的是订单支付记录表里的来源,因为只有这一个表就可以直接写。
之后,我们还要判断它的时间,在订单支付记录表里有 pay_ctime ,所以我们将第二个表中的 where 一行粘贴到这个表里。
接下来,按照分组 group :
有 order_id 、时间,这个时间最好是当天进行 group by ,这样的话我们计算的就是当天的。比如说,取 count(*),然后再写 order_id 。
pays as (
select
count(*)as pay_count,
order_id
from ods_nshop.ods_02_orders_pay_records
where
from_unixtime(cast(order_ctime/1000 as bigint),‘yyyyMMdd’)=‘20191102’
group by
order_id,
from_unixtime(cast(order_ctime/1000 as bigint),‘yyyyMMdd’),
)
如此我们就已经取到了,之后,我们的数据也会相应的取到, count 也会取到。到这里,我们的流水表就全部搞定。按照条件查询、按照分组求 count 。
写一个 select 的最终表。 from ?这里的 from 就要照应前三个, join 对应的上面的第二个表,以 order_id 为基准。 select 下的四行内容,我们照应成功后,在每个表里取值就可以。
select
from tborder join tbdetail
on tborder order_id=tbdetail.order_id
join pays
on tbdetail.order_id=pays.order_id
看我们需要什么值,在交易订单明细流水表中可以看到,第一个是订单 id ,在第一个表中是 order_id ,粘贴下来;
再往下第二个是取状态,也在第一个表中,粘贴下来;
第三个是店铺 id ,在第二个表里,粘贴下来;
第四个值使商品 id ,在第二个表中,粘贴下来;
第五个是用户 id ;第六个是收货人地址,在交易订单明细流水表里,粘贴下来;
第七个是支付类型,在第一个表中,粘贴下来;
第八个是支付网络方式,在上述写的三个表中是没有取它的,现在加上,在订单表中,取出放到写的第一个表中,然后取到最终的表里
第九个是支付次数,在第三个表中,粘贴下来;
下一个是购买商品单价,购买商品数量,商品加权价格都在在第二个表中,粘贴下来;我们写的三个表里面都有,并且这里面我当时没有取运费金额,只取了支付金额,我们一个一个看。
优惠金额和运费金额在订单表里是都有的,我们取一下,加到写的第一个表里。
下一个是支付金额,支付金额我们需要在订单详情表里查询,在第二个表里,粘贴下来;对下图红色方框内的内容进行修正,下图是正确的内容。
下一个是参与活动的和未参与活动的,在第二个表里,粘贴下来;下一个是创建时间,在第一个表里,粘贴下来。
select
tborder.order_id,
tborder.order_status,
tbdetail.supplier_code,
tbdetail.product_id,
tborder.customer_id,
tborder.consignee_zipcode,
tborder.pay_type,
tborder.pay_nettype,
pays.pay_count,
tbdetail.product_price,
tbdetail.product_cnt,
tbdetail.weighing_cost,
tborder.district_money,
tborder.shipping_money,
tbdetail.district_money,
tbdetail.is_activity,
tborder.order_ctime,
from tborder join tbdetail
on tborder order_id=tbdetail.order_id
join pays
on tbdetail.order_id=pays.order_id
这样就可以了,就是整个的 sql 。整个 sql 就全部写完了,资源都获取到了。