电商项目之交易订单明细流水表 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 就全部写完了,资源都获取到了。

相关文章
|
3月前
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之新建项目的元数据的sql报错,如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
1月前
|
SQL 关系型数据库 MySQL
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
54 11
|
3月前
|
监控 Java 开发者
揭秘Struts 2性能监控:选对工具与方法,让你的应用跑得更快,赢在起跑线上!
【8月更文挑战第31天】在企业级应用开发中,性能监控对系统的稳定运行至关重要。针对流行的Java EE框架Struts 2,本文探讨了性能监控的工具与方法,包括商用的JProfiler、免费的VisualVM以及Struts 2自带的性能监控插件。通过示例代码展示了如何在实际项目中实施这些监控手段,帮助开发者发现和解决性能瓶颈,确保应用在高并发、高负载环境下稳定运行。选择合适的监控工具需综合考虑项目需求、成本、易用性和可扩展性等因素。
44 0
|
3月前
|
SQL 存储 Oracle
MySQL 项目中 SQL 脚本更新、升级方式,防止多次重复执行
MySQL 项目中 SQL 脚本更新、升级方式,防止多次重复执行
64 0
|
3月前
|
SQL 运维 Oracle
SQL Server 项目中 SQL 脚本更新、升级方式,防止多次重复执行
SQL Server 项目中 SQL 脚本更新、升级方式,防止多次重复执行
46 0
|
6月前
|
SQL HIVE UED
【Hive SQL 每日一题】分析电商平台的用户行为和订单数据
作为一名数据分析师,你需要分析电商平台的用户行为和订单数据。你有三张表:`users`(用户信息),`orders`(订单信息)和`order_items`(订单商品信息)。任务包括计算用户总订单金额和数量,按月统计订单,找出最常购买的商品,找到平均每月最高订单金额和数量的用户,以及分析高消费用户群体的年龄和性别分布。通过SQL查询,你可以实现这些分析,例如使用`GROUP BY`、`JOIN`和窗口函数来排序和排名。
335 2
|
6月前
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(3)——连接和嵌套查询
简简单单 My SQL 学习笔记(3)——连接和嵌套查询
|
2月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
4月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
113 13
|
4月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。