• 数据来源:国外一个女装电商的订单、产品、客户、流量等数据,已经脱敏
  • 目的:熟悉MYSQL和python在提取数据和处理数据的操作,并从人、货、场、 分组分析留存方面,在数据中发现insights,了解该公司的销售情况。

数据

国外一个女装电商的各类数据,一共有以下这几个文件:

在MYSQLWorkBench中,首先创建database,然后导入这些数据

create database onlineshop;
use onlineshop;

逐个看一下文件:

  • Customers:

信息有客户ID,姓名,创建日期,当然姓名是脱敏过的。

  • Orders:

主要信息有订单ID,订单创建、关闭、取消时间,客户id,financial_status,总价,各类价格明细。financial_status内有表示名单的几类:取消了、退款、已付款、部分退款、没有付款。

  • Orders_items:

主要信息有ID,订单ID,产品ID,产品标题,产品sku,价格,数量等,产品信息也是做了脱敏处理的(一串码)。

  • products:

主要信息有ID,标题,产品种类和创建、发布时间。

  • products_skus:

主要信息有ID,产品ID,product_style,sku,创建时间,价格,其中style是相当于正常的SPU的编号,是这个公司自己使用的标记名字。

  • traffic:

主要信息有时间,浏览量,session(可以存储用户信息),产品详细浏览量,尝试结算数目,加入购物车数目,平均停留时长。

  • transactions:

主要信息有订单ID,总额,种类,状态,时间等,这里的种类有几个类别:Authorization,captured,refund。前两个都有了(授权了才能扣款)也可以表达为sales,成功卖了,refund表示退款。

生成汇总表格

融合orders,transactions,order_items生成关于订单的汇总:

CREATE OR REPLACE VIEW order_summary_view
-- 存成view每次都会重新run一遍这些语句
-- CREATE TABLE onlineshop.order_summary
AS
WITH transactions
AS
(SELECT order_id,SUM(IF (LOWER(kind) = 'authorization',amount,0)) auth_amount,SUM(IF (LOWER(kind) = 'capture',amount,0)) capture_amount,SUM(IF (LOWER(kind) = 'sale',amount,0)) sale_amount,SUM(IF (LOWER(kind) = 'void',amount,0)) void_amount,SUM(IF (LOWER(kind) = 'refund',amount,0)) refund_amountFROM onlineshop.transactions WHERE LOWER(status) != 'failure' GROUP BY order_id
),
all_orders
AS
(
SELECT * FROM onlineshop.orders orders
LEFT JOIN transactions ON orders.id = transactions.order_id),
items
AS
(SELECT order_id,SUM(quantity) AS total_quantity,SUM(price*quantity) AS total_items_priceFROM onlineshop.orders_items GROUP BY order_id
)
SELECT all_orders.id as order_id,all_orders.created_at,all_orders.closed_at,all_orders.cancelled_at,all_orders.customer_id,all_orders.financial_status,all_orders.fulfillment_status,all_orders.total_line_items_price,all_orders.total_discounts,all_orders.subtotal_price,all_orders.shipping_rate,all_orders.total_price,all_orders.auth_amount,all_orders.capture_amount,all_orders.sale_amount,all_orders.void_amount,all_orders.refund_amount,items.total_quantity,items.total_items_price
FROM all_orders LEFT JOIN items ON all_orders.id = items.order_id;

对产品同样进行汇总:

SELECT products.id AS product_id,products.published_at,LOWER(products.product_type) AS product_type,products.title AS product_title,skus.id AS sku_id,skus.product_style,skus.sku,skus.price AS sku_price
FROMonlineshop.products AS productsLEFT JOINonlineshop.products_skus AS skus ON products.id = skus.product_id;

对客户信息也进行汇总(主要还是订单信息):

CREATE OR REPLACE VIEW onlineshop.customer_summary_view
AS
WITH customer_orders
AS
(SELECT customer_id,COUNT(DISTINCT order_id) AS total_orders,SUM(total_quantity) AS total_quantity,SUM(void_amount) AS total_void,SUM(sale_amount) AS total_sale,SUM(auth_amount) AS total_auth,SUM(capture_amount) AS total_capture,SUM(total_price) AS total_spent,SUM(refund_amount) AS total_refund,MIN(order_id) AS first_order_id,MAX(order_id) AS last_order_id,MIN(created_at) AS first_order_at,MAX(created_at) AS last_order_at FROM onlineshop.order_summary GROUP BY customer_id
)
SELECT customers.id AS customer_id,customers.created_at,customers.full_name,customer_orders.total_orders,customer_orders.total_quantity,customer_orders.total_spent,customer_orders.total_refund,customer_orders.first_order_id,customer_orders.first_order_at,customer_orders.last_order_id,customer_orders.last_order_at,customer_orders.total_void,customer_orders.total_sale,customer_orders.total_auth,customer_orders.total_capture
FROM onlineshop.customers AS customersLEFT JOIN customer_orders ON customers.id = customer_orders.customer_id;

sql 一对多获得一条数据_从真实销售数据获得insights——SQL部分相关推荐

  1. gorm 返回多条数据_如何优雅的操作数据库?

    今天要介绍的这个python第三方库非常厉害,完美操作各种数据库. 名字叫records,在网上很少有这个库的相关资料,但是在开源社区可是很火热的哦. 如果这还不能打消你的顾虑,再告诉你一件事:如果你 ...

  2. java sql 写入万条数据_如何快速向数据库插1000万数据?4种方法对比,它简单却速度最快

    目录 场景介绍 项目配置 Mybatis为什么慢? JdbcTemplate让我眼前一亮 原生JDBC就是快啊! 存储过程怎么样? 越简单越快 前言 一直有一种说法:批量插入大量数据到MySQL数据库 ...

  3. mysql 一对多 根据多条数据排序_优化的道路永无止境——Mysql的ICP及MRR

    在讲ICP和MRR之前,我们先了解一下MySQL的架构.于本文的重点并不在架构细节上,所以让我们直接看关键部分,存储引擎作为单独的一层,是连接底层存储系统和上层server其他部分的桥梁,而MySQL ...

  4. 织梦php标签获取多条数据_在织梦标签中使用SQL实现多个数据的读取方法

    内容页中: {dede:field name='mid' runphp='yes'} $aid=@me; $Query = "Select title from `dede_taglist` ...

  5. insert into 多条数据_「数据库」一千行MySQL命令

    基本操作 /* Windows服务 */-- 启动MySQL net start mysql-- 创建Windows服务 sc create mysql binPath= mysqld_bin_pat ...

  6. php foreach 为什么在if条件下多条数据只取出一条数据_微信大牛教你深入了解数据库索引...

    ​| 作者 刘国斌,腾讯微信事业群研发工程师,目前从事企业微信的后台研发工作,已经参与企业微信消息系统.群聊.客户联系等企业微信多个核心功能的迭代. 数据库查询是数据库的最主要功能之一.我们都希望查询 ...

  7. c mysql显示多条数据_用一条mysql语句插入多条数据

    假如有一个数据表A: id name title addtime 如果需要插入n条数据 : $time= time(); $data = array( array( 'name'=>'name1 ...

  8. 同时更改一条数据_数据库中的引擎、事务、锁、MVCC(二)

    二.事务 介绍锁之前,咱们先介绍一下 什么叫做事务. 事务就是一组对数据库的一系列的操作,要么同时成功,要么同时失败. 1.事务的特性(ACID): 原子性:事务是整个操作,不可分割,要么都成功,要么 ...

  9. 如何1秒内向Sql Server插入几万条数据

    2019独角兽企业重金招聘Python工程师标准>>> Sql语句如下 INSERT INTO [TableTemp]([Date],[Count])VALUES('2014/2/1 ...

最新文章

  1. (方案汇总)批处理中畸形文件夹和畸形文件的创建、访问、删除
  2. 【深度学习的数学】用神经网络进行图像分类时,为什么输出层的神经单元数量要跟分类数相同?可以采用二进制的表示方式么?
  3. SpringBoot整合spring-ws开发webservice接口(全流程详细教程)
  4. mysql dump 导入导出_使用mysqldump导入导出数据
  5. 关于笔记本安装parrot和kali的一些问题(花屏,息屏,屏幕不能休眠)
  6. GraphQL支持层级结构的query
  7. 字节跳动1/3员工不支持取消大小周!库克称iPhone将采用可回收材料生产;清华博士接亲被要求现场写代码|极客头条...
  8. 谈谈运维人员谨慎操作系统环境和管理
  9. web自动化知识点-03
  10. 超详细 Spring @RequestMapping 注解使用技巧
  11. 求助!ENDnoteX8+Word2016可关联,但总提示【该文档有宏】等bug
  12. NVivo 12 Mac的大规模部署
  13. mindoc升级总结
  14. 希腊字母在数学或物理中代表的意思各是什么
  15. unity -- 存档与读档
  16. c#创建画布_WinForm GDI编程:Graphics画布类
  17. Dell Inspiron 5576 显卡驱动程序无法安装或不认识显卡
  18. Vmware搭建软路由教程(Openwrt)
  19. DIV布局强制英文换行(div英文不怎么给力啊~ 只有用别的方法啦)
  20. 一文读懂深度学习与机器学习的差异

热门文章

  1. 从方法论到零售客户实践 解码阿里巴巴数据中台——2018上海云栖大会
  2. Lucene Document getBoost(float) 和 setBoost(float)
  3. CentOS 6.5 下安装 Redis 2.8.7
  4. IPython、Notebook、qtconsole使用教程
  5. 转发:Hekaton:SQL Server集成的内存事务处理
  6. wpf 绘制rectangle 代码
  7. Exchange 2007 内存使用问题
  8. Oracle游标学习笔记
  9. 学习ASP.NET比较完整的流程
  10. 齐二TK6916/20/26/32系列数控落地铣镗床简介8