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

相关文章
|
5月前
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之新建项目的元数据的sql报错,如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
3月前
|
SQL 关系型数据库 MySQL
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
102 11
|
5月前
|
监控 Java 开发者
揭秘Struts 2性能监控:选对工具与方法,让你的应用跑得更快,赢在起跑线上!
【8月更文挑战第31天】在企业级应用开发中,性能监控对系统的稳定运行至关重要。针对流行的Java EE框架Struts 2,本文探讨了性能监控的工具与方法,包括商用的JProfiler、免费的VisualVM以及Struts 2自带的性能监控插件。通过示例代码展示了如何在实际项目中实施这些监控手段,帮助开发者发现和解决性能瓶颈,确保应用在高并发、高负载环境下稳定运行。选择合适的监控工具需综合考虑项目需求、成本、易用性和可扩展性等因素。
50 0
|
6月前
|
SQL 监控 关系型数据库
PolarDB产品使用问题之SQL防火墙怎么拦截没有指定WHERE条件的特定表的SQL语
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
5月前
|
SQL 存储 Oracle
MySQL 项目中 SQL 脚本更新、升级方式,防止多次重复执行
MySQL 项目中 SQL 脚本更新、升级方式,防止多次重复执行
90 0
|
5月前
|
SQL 运维 Oracle
SQL Server 项目中 SQL 脚本更新、升级方式,防止多次重复执行
SQL Server 项目中 SQL 脚本更新、升级方式,防止多次重复执行
66 0
|
6月前
|
SQL 存储 数据库
MySQL设计规约问题之如何处理日志类型的表
MySQL设计规约问题之如何处理日志类型的表
|
SQL Perl 关系型数据库
PL/SQL学习笔记-触发器
一:语句级触发器语句级触发器是指当执行DML操作时,以语句为单位执行的触发器(注意与下面提到的行级触发器比较)先看代码 create or replace trigger xland_trigger before insert or update or delete on labor.
933 0
|
4月前
|
关系型数据库 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)")