电商项目之交易订单明细流水表 SQL 实现(下)|学习笔记

简介: 快速学习电商项目之交易订单明细流水表 SQL 实现(下)

开发者学堂课程【新电商大数据平台2020最新课程电商项目之交易订单明细流水表 SQL 实现(下)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/640/detail/10534


电商项目之交易订单明细流水表 SQL 实现(下)

 

我们可以看到交易订单明细流水表中需要知道支付次数,那我们如何判断是否支付?

我们需要找到订单支付记录表,可以看到表里有一个支付状态,一个是支付成功,一个是支付失败。

支付成功等于1,支付失败等于0,那我们取值支付次数的时候是不能统计失败的,只能统计成功的。

image.png

如果这里没有给一个硬性的要求,比如说一定会成功,一定会失败;交易订单明细流水表里只是说支付次数,不计入失败成功,不考虑其他因素,就可以随意统计,可以不用加入判断。

但是如果加上了判断,表中要得到的信息是支付成功的次数,那在这里就需要取成功的次数。交易订单明细流水表中没有说取成功失败,就是默认都行。

接下来,我们直接统计看到的就可以。上一个表的结尾加上逗号,把后续的 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 ;第六个是收货人地址,在交易订单明细流水表里,粘贴下来;

第七个是支付类型,在第一个表中,粘贴下来;

第八个是支付网络方式,在上述写的三个表中是没有取它的,现在加上,在订单表中,取出放到写的第一个表中,然后取到最终的表里

image.png

第九个是支付次数,在第三个表中,粘贴下来;

下一个是购买商品单价,购买商品数量,商品加权价格都在在第二个表中,粘贴下来;我们写的三个表里面都有,并且这里面我当时没有取运费金额,只取了支付金额,我们一个一个看。

优惠金额和运费金额在订单表里是都有的,我们取一下,加到写的第一个表里。

image.png

下一个是支付金额,支付金额我们需要在订单详情表里查询,在第二个表里,粘贴下来;对下图红色方框内的内容进行修正,下图是正确的内容。

下一个是参与活动的和未参与活动的,在第二个表里,粘贴下来;下一个是创建时间,在第一个表里,粘贴下来。

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 就全部写完了,资源都获取到了。

相关文章
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
108 1
|
24天前
|
SQL 数据库 数据库管理
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(一)模式、表、索引与视图
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(一)模式、表、索引与视图
56 11
|
2月前
|
SQL
现有用户成就统计需求,每个用户有多个成就,某一个成就会被多人拥有,写出数据表设计方案,用一条sql查出每个成就(B.ach_name)下的男生(sex=0)和女生(sex=1)分别有多少?
现有用户成就统计需求,每个用户有多个成就,某一个成就会被多人拥有,写出数据表设计方案,用一条sql查出每个成就(B.ach_name)下的男生(sex=0)和女生(sex=1)分别有多少?
41 0
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL】——用SQL语句实现数据库和基本表的创建
【MySQL】——用SQL语句实现数据库和基本表的创建
70 3
【MySQL】——用SQL语句实现数据库和基本表的创建
|
4月前
|
SQL Oracle 关系型数据库
SQL 的 with as 临时中间表
SQL 的 with as 临时中间表
|
4月前
|
SQL 数据库
SQL-修改表操作
SQL-修改表操作
|
4月前
|
SQL 存储 关系型数据库
SQL语句-表操作
SQL语句-表操作
|
24天前
|
SQL 安全 算法
【SQL server】玩转SQL server数据库:第四章 数据库安全性
【SQL server】玩转SQL server数据库:第四章 数据库安全性
65 12
|
24天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
61 10
|
7天前
|
SQL 数据可视化 算法
SQL Server聚类数据挖掘信用卡客户可视化分析
SQL Server聚类数据挖掘信用卡客户可视化分析
16 2