数据库实例应用

【电商数据处理案例】

目标需求:将某电商脱敏后数据导入数据库进行加工处理,使用加工好的数据分析业务问题数据获取

  • 客户相关:UserInfo.csv:用户主表、RegionInfo.csv:区域表、UserAddress.csv:用户地址表
  • 商品相关:GoodsInfo.csv:商品主表、GoodsBrand.csv:商品品牌表、GoodsColor.csv:商品颜色表、GoodsSize.csv:商品尺码
  • 订单相关文件:OrderInfo.csv:订单主表、OrderDetail.csv:订单详情表

SQL数据处理:

数据清洗→数据筛选→数据透视→数据排序

表结构一览:

表之间的关联关系:

数据准备:

新建数据库

create database ds;use ds;

建表并导入数据

--  UserInfo tablecreate table userinfo(userid varchar(6) not null default '-',username varchar(20) not null default '-',userpassword varchar(100) not null default '-',   sex int not null default 0,usermoney int not null default 0,frozenmoney int not null default 0,addressid varchar(20) not null default '-',regtime varchar(20) not null default '-',lastlogin varchar(20) not null default '-',lasttime date not null);#导入数据load data infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/UserInfo.csv"into table userinfofields terminated by ','ignore 1 lines;-- regioninfocreate table regioninfo(regionid varchar(4) not null default '-',parentid varchar(4) not null default '-',regionname varchar(20) not null default '-',   regiontype int not null default 0,agencyid int not null default 0,pt varchar(11) not null default '-');#导入数据load data infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/RegionInfo.csv"into table regioninfofields terminated by ','ignore 1 lines;-- UserAddresscreate table useraddress(addressid varchar(5) not null default '-',userid varchar(6) not null default '-',  consignee varchar(50) not null default '-',country varchar(1) not null default '-',province varchar(2) not null default '-',city varchar(4) not null default '-',district varchar(4) not null default '-', address varchar(200) not null default '-',pt varchar(11) not null default '-');#导入数据load data infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/UserAddress.csv"into table useraddressfields terminated by ','ignore 1 lines;-- GoodsInfocreate table goodsinfo(goodsid varchar(6) not null default '-',typeid varchar(3) not null default '-',markid varchar(4) not null default '-',goodstag varchar(100) not null default '-',brandtag varchar(100) not null default '-',customtag varchar(100) not null default '-',goodsname varchar(100) not null default '-',clickcount int not null default 0,clickcr int not null default 0,goodsnumber int not null default 0,goodsweight int not null default 0,marketprice double not null default 0,shopprice double not null default 0,addtime varchar(20) not null default 0,isonsale int not null default 0,sales int not null default 0,realsales int not null default 0,extraprice double not null default 0,goodsno varchar(10) not null default '-');#导入数据load data infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/goodsinfo.csv"into table goodsinfofields terminated by ','ignore 1 lines;-- GoodsBrandcreate table goodsbrand(SupplierID varchar(4) not null default '-',BrandType varchar(100) not null default '-',pt varchar(11) not null default '-');#导入数据load data infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/GoodsBrand.csv"into table goodsbrandfields terminated by ','ignore 1 lines;-- GoodsColorcreate table goodscolor(ColorID varchar(4) not null default '-',ColorNote varchar(20) not null default '-',ColorSort int not null default 0,   pt varchar(11) not null default '-');#导入数据load data infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/GoodsColor.csv"into table goodscolorfields terminated by ','ignore 1 lines;-- GoodsSizecreate table goodssize(SizeID varchar(4) not null default '-',SizeNote varchar(100) not null default '-',SizeSort int not null default 0,   pt varchar(11) not null default '-');#导入数据load data infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/GoodsSize.csv"into table goodssizefields terminated by ','ignore 1 lines;-- OrderInfocreate table OrderInfo(OrderID varchar(6) not null default '-',UserID varchar(10) not null default '-',OrderState int not null default 0,PayState int not null default 0,AllotStatus int not null default 0,Consignee varchar(100) not null default '-',Country int not null default 0,Province int not null default 0,City int not null default 0,District int not null default 0,Address varchar(100) not null default '-',GoodsAmount double not null default 0,OrderAmount double not null default 0,ShippingFee int not null default 0,RealShippingFee int not null default 0,PayTool int not null default 0,IsBalancePay int not null default 0,BalancePay double not null default 0,OtherPay double not null default 0,PayTime varchar(20),AddTime varchar(20) not null default '-');#导入数据load data infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/orderinfo.csv"into table OrderInfofields terminated by ','ignore 1 lines;-- OrderDetailcreate table OrderDetail(RecID varchar(7) not null default '-',OrderID varchar(6) not null default '-',UserID varchar(6) not null default '-',SpecialID varchar(6) not null default '-',GoodsID varchar(6) not null default '-',GoodsPrice double not null default 0,ColorID varchar(4) not null default '-',SizeID varchar(4) not null default '-',Amount int not null default 0);#导入数据load data infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/OrderDetail.csv"into table OrderDetailfields terminated by ','ignore 1 lines;-- 查询导入表的行数select count(*) from userinfo; -- 1000select count(*) from RegionInfo; -- 3415select count(*) from useraddress; -- 10000select count(*) from goodsinfo; -- 10000select count(*) from goodsbrand; -- 64select count(*) from goodscolor; -- 2641select count(*) from goodssize; -- 289select count(*) from orderinfo; -- 3711select count(*) from orderdetail; -- 10000

实践题

表数据调整

用户信息表

select * from userinfo;-- 时间戳转换为标准的日期时间型格式set sql_safe_updates=0; -- 设置数据库的安全权限update userinfo set regtime = from_unixtime(regtime);-- 执行报错 :Error Code: 1406. Data too long for column 'regtime'-- 因为日期时间型不能直接放到文本格式内alter table userinfo modify regtime datetime; -- 表中列有数据的情况下不能直接修改数据类型-- 在表中添加一个新字段“regtime_new”,类型为日期时间型alter table userinfo add regtime_new datetime;-- 这个时候可以去更新新字段“regtime_new”的值,将时间戳转换为标准日期时间格式update userinfo set regtime_new = from_unixtime(regtime);-- 同样的方法,设置lastlogin(最后登录时间)alter table userinfo add lastlogin_new datetime;update userinfo set lastlogin_new = from_unixtime(lastlogin);

区域信息表

select * from RegionInfo;-- 需要将“pt”字段由文本型转换为日期型-- 首先需要提取文本中的日期信息(中间8个字符)-- 然后将提取的信息转换为日期型格式(同样使用添加一列的方式)alter table RegionInfo add pt_new date;update RegionInfo set pt_new=mid(pt,2,8);

其他表的调整

select * from useraddress;alter table useraddress add pt_new date;update useraddress set pt_new=mid(pt,2,8);select * from goodsinfo;alter table goodsinfo add addtime_new datetime;update goodsinfo set addtime_new = from_unixtime(addtime);select * from goodsbrand;alter table goodsbrand add pt_new date;update goodsbrand set pt_new=mid(pt,2,8);select * from goodscolor;alter table goodscolor add pt_new date;update goodscolor set pt_new=mid(pt,2,8);select * from goodssize;alter table goodssize add pt_new date;update goodssize set pt_new=mid(pt,2,8);select * from orderinfo;alter table orderinfo add addtime_new datetime;update orderinfo set addtime_new = from_unixtime(addtime);-- paytime字段是支付时间,0的数据不能直接通过from_unixtime()转换(否则会变成1970-01-01 00:00:00),需要先转换成nullalter table orderinfo add paytime_new datetime;update orderinfo set paytime_new = from_unixtime(paytime) where paytime <> '0';;select * from orderdetail;-- orderdetail表不需要调整列数据字段格式

【实际查询案例】

-- 1、不同时段的登陆用户数

-- 按照时间分组,统计每个小时有多少用户登录-- 针对字段“lastlogin_new”提取小时select hour(lastlogin_new) 时段,count(userid) 登录用户数from userinfogroup by hour(lastlogin_new)order by 时段;-- 在实际情况中最后登录时间会是不同的日期,我们就可以用来统计最近7天或者30天登录的用户数,用来统计潜在流失用户

-- 2、不同时段的下单数量

-- 在订单信息表orderinfo中,orderid是唯一的select hour(addtime_new) 时段,count(orderid) 下单数量from orderinfogroup by hour(addtime_new)order by 时段;-- 不同时段的累计下单数量select hour(addtime_new) 时段,count(orderid) 下单数量,sum(count(orderid)) over( order by hour(addtime_new) )累计下单数量from orderinfogroup by hour(addtime_new);-- 上面的例子指定了分区内的排序, 默认就是统计滑动窗口第一行到当前行的订单数量

-- 3、当日GMV(未付款订单金额0+待发货订单金额1+已发货订单金额2+已取消订单金额3)

-- GMV(Gross Merchandise Volume)即商品交易总额,是一段时间内的成交总额-- 按照订单状态进行orderstate分组select orderstate,sum(orderamount) 订单金额from orderinfogroup by orderstatewith rollup; -- with rollup 对分组之后的聚合值进行求和

-- 4、各省市消费金额(orderinfo-orderamount)

-- orderinfo表中的省份字段province 城市字段city-- RegionInfo表中都存放在regionid字段-- select * from RegionInfo;select r1.regionname 省份,r2.regionname 城市,round(sum(orderamount),2)   消费金额from orderinfojoin RegionInfo as r1 on province = r1.regionidjoin RegionInfo as r2 on city = r2.regionidgroup by province,cityorder by province,city;

-- 5、不同支付方式的订单量

-- 支付工具 paytool 用户提交订单后会进入支付界面,选择支付方式,不管支付成功与否,都会产生支付方式select paytool 支付方式,count(orderid) 订单量from orderinfogroup by paytoolorder by paytool;

-- 6、哪种支付方式可能导致用户支付不成功而取消订单

-- 查询因为支付不成功而取消的订单数量-- 订单状态 orderstate = 3 支付失败 paystate = 0select t1.paytool, 未支付取消的订单量,每个支付工具订单总量,ifnull(未支付取消的订单量/每个支付工具订单总量,0) 占比from(select paytool,count(orderid) 每个支付工具订单总量from orderinfogroup by paytool) t1join(select paytool,count(orderid) 未支付取消的订单量from orderinfowhere orderstate = '3' and paystate = '0'group by paytool) t2on t1.paytool = t2.paytool;

-- 7、当日不同品牌的总销量

-- 销量在表orderdetail   品牌在表goodsbrand-- 通过中间表商品表goodsinfo进行三表连接-- 会存在有的商品品牌没有在品牌表中存在的情况select goodsinfo.typeid 品牌ID,brandtype 品牌名称,sum(amount) 销量from orderdetailleft join goodsinfo on orderdetail.goodsid = goodsinfo.goodsidleft join goodsbrand on goodsinfo.typeid = goodsbrand.supplieridgroup by goodsinfo.typeid;

-- 8、当日不同品牌的复购用户数

select  t.品牌ID,brandtype,count(t.userid) 复购用户数from(select goodsinfo.typeid 品牌ID,brandtype,userid,count(distinct orderid) 购买次数from orderdetailleft join goodsinfo on orderdetail.goodsid = goodsinfo.goodsidleft join goodsbrand on goodsinfo.typeid = goodsbrand.supplieridgroup by goodsinfo.typeid,useridhaving count(distinct orderid)  > 1) tgroup by t.品牌ID;

-- 9、查询结果保存为表,用于后续重复使用

create table pro_amount asselect r1.regionname 省份,r2.regionname 城市,round(sum(orderamount),2)   消费金额from orderinfojoin RegionInfo as r1 on province = r1.regionidjoin RegionInfo as r2 on city = r2.regionidgroup by province,cityorder by province,city;select * from pro_amount;

-- 10、将查询结果导出到指定的路径中

-- 主要需要使用以下路径 "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads"select r1.regionname 省份,r2.regionname 城市,round(sum(orderamount),2)   消费金额from orderinfojoin RegionInfo as r1 on province = r1.regionidjoin RegionInfo as r2 on city = r2.regionidgroup by province,cityorder by province,cityinto outfile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/pro_amount.csv";

【一周入门MySQL—5】相关推荐

  1. 【一周入门MySQL—4】数据库进阶练习

    数据库进阶练习 数据库进阶查询练习 素材:来自以下四个Table 数据准备(创建表,导入数据) -- 数据准备,创建Tableuse test;-- 学生表create table stu(s_id ...

  2. 【一周入门MySQL—3】多表查询、子查询、常用函数

    多表查询.子查询.常用函数 一.多表查询 多表查询:通过不同表中具有相同意义的关键字段,将多个表进行连接,查询不同表中的字段信息. 对应关系 一对一:比如下图的人员信息表和人员身份证对应表,一个员工只 ...

  3. 【一周入门MySQL—1】数据库概述、数据定义、数据操作

    数据库概述.数据定义.数据操作 一.数据库概述 数据库基础概念:按照一定的数据结构来组织.存储和管理数据的仓库. 企业数据存储面临的问题: 存储大量数据: 大量数据的检索和访问: 保证数据信息的一致性 ...

  4. 【一周入门MySQL—2】单表查询

    单表查询 数据查询语言DQL 单表查询的基本语法: 全表查询:select * from 表名; 查询指定列:select 字段1[,字段2] from 表名; 别名的设置:select 字段 [as ...

  5. mysql 截断表_入门MySQL——基础语句篇

    前言: 前面几篇文章,我们介绍了MySQL的基础概念及逻辑架构.相信你现在应该有了自己的一套MySQL环境,接下来我们就可以开始练习MySQL了.本文将从MySQL最基础的语句出发,为你展示出创建及修 ...

  6. mysql key_block_size_Mysql入门mysql Key_buffer_size参数的优化设置

    <Mysql入门mysql Key_buffer_size参数的优化设置>要点: 本文介绍了Mysql入门mysql Key_buffer_size参数的优化设置,希望对您有用.如果有疑问 ...

  7. navc mysql函数备份_入门MySQL——备份与恢复

    前言: 前面几篇文章为大家介绍了 MySQL 各种语句语法的用法及用户权限相关知识.本篇文章将主要讲解 MySQL 数据库数据备份与恢复相关知识,主要聚焦于逻辑备份,介绍mysqldump工具的使用以 ...

  8. linux同步两台mysql数据,Mysql入门MySQL 数据库两台主机同步实战(linux)

    <Mysql入门MySQL 数据库两台主机同步实战(linux)>要点: 本文介绍了Mysql入门MySQL 数据库两台主机同步实战(linux),希望对您有用.如果有疑问,可以联系我们. ...

  9. mysql主从同步部分表_Mysql入门MySQL 主从同步部分数据表

    <Mysql入门MySQL 主从同步部分数据表>要点: 本文介绍了Mysql入门MySQL 主从同步部分数据表,希望对您有用.如果有疑问,可以联系我们. 导读:在配置MySQL主从同步的时 ...

最新文章

  1. 阿里发布AliGenie2.0系统,“百箱大战”用上视觉武器
  2. 敏捷开发中如何使用看板方法创造价值
  3. 欲瘦其包,必先探清其底细
  4. Redis最佳实践指南
  5. leetcode406. 根据身高重建队列
  6. Vue动态传值与接收步骤
  7. mysql 将 字符 转换成 数字
  8. 雷丰阳spring系列的笔记_怒肝8个月源码,我成为了 Spring 开源贡献者
  9. 转 .NET中的异步编程(四)- IO完成端口以及FileStream.BeginRead
  10. java怎么编写木马,实现简单木马免杀(示例代码)
  11. nmake -f ms\ntdll.mak 模块计算机类型“X86”与目标计算机类型“x64”冲突
  12. MOS管当开关控制时,为什么一般用PMOS做上管NMOS做下管?
  13. 企业价值角度:RPA 机器人是什么?
  14. libusb ubuntu
  15. 一行命令aigc stable-diffusion 文本生成图片(动漫,艺术图,涩图,成人) 快速部署体验,微信端,小程序
  16. 软件人才外包驻场开发比软件项目外包的费用要高 原因在哪里
  17. 研究生体检色弱计算机专业,研究生体检主要有什么项目 色盲会影响专业吗
  18. 126邮箱设置html发送邮件,126邮箱设置pop3
  19. [云原生之k8s] Kubernetes核心组件
  20. kali中安装使用sublist3r

热门文章

  1. lr参数化取值与连接数据库
  2. Python-线程的生命周期
  3. cb-A10系统优化之(一):去除自启动软件
  4. InstallShield自定义安装界面
  5. 人生的84000种可能
  6. PMCAFF | 智能硬件2.0时代:用户导向,内容连接
  7. 读书笔记 | O2O本质:价值重构三部曲 《移动互联,决胜020》
  8. Exchange 退信550 5.1.11 RESOLVER.ADR.ExRecipNotFound
  9. Wireshark 【OSI三层】抓包过滤规则和显示过滤规则实例
  10. ServletContextListener接口用法