将某电商脱敏后数据导入数据库进行处理加工,并对相关数据进行查询。本次案列中是很经典的关于电商数据的整理,一共包含了九张数据表,还是比较多,内在逻辑也是比较绕,所以先对这九张表进行大体上的分类。
1、买方数据表(3张)
(1)UserInfo.csv——用户主表,买方信息
(2)RegionInfo.csv——区域表 国家行政区域划分表
(3)UserAddress.csv——用户地址表 用户收货地址信息
2、卖方数据表(4张)
(1)GoodsInfo.csv:商品主表
(2)GoodsBrand.csv:商品品牌表
(3)GoodsColor.csv:商品颜色表
(4)GoodsSize.csv:商品尺码表
3、购买行为数据表(2张)
(1) OrderInfo.csv:订单主表 主键 订单ID+商品ID,用来连接卖方
(2)OrderDetail.csv:订单详情表 主键 订单ID 用来连接买方
4、表关系详解
其实,sql语句并不难,难的是这些表之间的逻辑关系,如上图,总共给出了12个关系,要清楚的知道每个表里有哪些内容,每个表之间又怎么建立起关系,也就是哪个是关键字段,同时,还要明白,
所用的关键字段到底是 一对一 一对多 还是 多对多的关系,图上我已经标出,都是一对多。
个人认为重要思想就是:
1、我要什么内容?
2、这些内容存放在哪张表里?
3、我该怎么取出来?好,用多表查询,那么我的关键字段应该选那个?
4、关键字段的对应关系是什么?对我所查找的结果有什么影响?
本次案列使用的是work bench 6.3+mysql5.7
1、建立数据库
2、表 UserInfo 的建立及数据导入
那么,在建表前先看看数据
大部分字段其实还是挺好定义的,就是 regtime 和 lastlogin,里面是时间戳,所以先用文本来储存,后面再转化成时间格式
不出问题,表信息应如下:
3、表 regioninfo 的建立及数据导入
结果应该如下:
4、表 useraddress 的建立及数据导入
结果如下:
5、表 goodsinfo 的建立及数据导入
结果如下:
6、表 goodsbrand 的建立及数据导入
结果如下:
7、表 goodscolor 的建立及数据导入
结果如下:
8、表 goodssize 的建立及数据导入
结果如下:
9、表 OrderInfo 的建立及数据导入
结果如下:
10、表 OrderInfo 的建立及数据导入
结果如下:
11、对建立的九张表再进行一次检验
若检验没有问题,可继续往下,如果任何不对,重新再来吧,否则肯定是错的!
1、求出购买产品金额最多的前十名顾客
按照我的思考:
1、我需要什么?顾客
2、什么样的顾客?金额最多的前十
3、 也就是说我还需要产品总金额,然后对其进行排序,递减,保留前十即可
4、顾客和金额从哪里来? 根据表的信息,来自于同一张表 orderinfo,这就简单了,不需要多表查询
2、求出购买产品金额最多的前十名顾客的最后登录时间
感觉很熟悉啊,和1相比,无非就是多求一个最后登录时间 lastlogin_,最后登录时间在表 userinfo 中,所以,这就要用到多表查询了,
这里显然是在1的基础上增加而已,自然应该选用表 orderinfo作为主表,关键字段,在表关系里已经给出 orderinfo.userid =userinfo.userid。
3、 求出购买产品金额最多的前十名顾客的所在城市
没毛病 ,和2其实是一回事,只是改成求 城市 去了,那么城市在哪里,根据表关系,所有的 country province city district
都在表 RegionInfo种,对应于regionname,关键字段也给出了 city = regionid 注意主表应该选谁
4、求出购买力最强的前十个城市
这个问题是这样的,可以先对城市进行分类,把各个城市的 OrderAmount 求和,降序,保留前十即可
5、求出购买力最强的前十个城市以及他们所在的省份
这个问题就比较有意思了,首先购买力最强的前十个城市,我们是可以求出来的,没毛病,根据表的关系 省份 也需要连接表 RegionInfo,
也需要 regionname 来取值,但是, regionname已经用来取 城市 了
所以不能直接来求。但是在取 城市 的同时,可以在 表 OrderInfo 中,取到该城市的 province 编号,
于是我就可以先得到 购买力最强的前十个城市以及他们所在的省份的编号 这样一个表
再和表 RegionInfo ,以 省份编号 = RegionInfo.regionid,再以 regionname来取省份就好了
6、求出最畅销的十个品牌
这道题,也比较有意思了,需要的是品牌其实是在表 goodsbrand 中的 ,其条件是最畅销,自然需要商品的销量,而商品的销量 Amount 在表 OrderDetail 中,
最遗憾的是这两个表并没有直接的关系,不能直接联合查询,只能借表 GoodsInfo 来过度
7、求出最畅销的十种颜色、以及最不畅销的十种颜色
需要颜色,颜色在表 GoodsColor 里,销量自然在表 orderdetail里,根据表关系,可以通过 ColorID 查询,查两次,一个升序,一个降序,用 union 连接即可
8、求出最畅销的十个商品所属品牌中所有商品的销售额
-- 9. 买不同商品种类最多的前十名用户所使用的收货城市都有哪些-- (非重复计数count(distinct 字段名))
所有数据:
链接:https://pan.baidu.com/s/1y_XOrrriionxuSpuFgPTkg 提取码:g3zi