BDA初级分析——SQL多表连接应用

一、用SQL拼接数据

三个初始数据

 问题1:在所有的数据里,销售额最高的产品品类名是什么?

问题2:是否有什么产品是在所观测的时间里没有被购买过的?

拼接数据:JOIN

join,加入

作用:连接多张表,根据两张表中的关联字段,将两张表拼在一起

写法:表1 JOIN 表2 ON 表1.连接字段=表2.连接字

 

在所有的数据里,销售额最高的产品品类名是什么?

 

 Sku:两张表基于sku连接,拼接到一起

代码解读

SELECT cat_name,SUM(rev) sum_rev
FROM orders a
INNER JOIN product b
ON a.sku=b.sku
GROUP BY cat_name
ORDER BY sum_rev DESC;
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

  

 INNER JOIN

保留左右表格交集的部分

 

 LEFT JOIN

保留JOIN左边的表格全部的内容

 

 

RIGHT JOIN

保留JOIN右边的表格全部的内容

 

 哪些产品整个这段时间里都是没有人购买的?

 代码解读

SELECT a.sku_name,sum(rev)
FROM product a
LEFT JOIN orders b
ON a.sku=b.sku
GROUP BY cat_name
ORDER BY sum_rev DESC;
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 

 

二、用SQL聚合数据

用户从注册到购买之间花费了多长时间?

 

 代码解读

CREATE TABLE user_first_order
AS
SELECT user_id, MIN(order_dt) first_order
FROM orders
GROUP BY user_id;


SELECT a.user_id, b.first_order, a.reg_dt, datediff(b.first_order,a.reg_dt)
as reg_to_buy
FROM users a
INNER JOIN user_first_order b
ON a.user_id=b.user_id
ORDER BY reg_to_buy;

 

 

 

不同周期完成首单的用户、 不同装修计划和特征的用户在首次购买上是不是会表现出不同的行为?

 代码解读

CREATE TABLE user_reg_to_order as
SELECT
a.user_id,b.first_order,a.reg_dt, datediff(b.first_order,a.reg_dt)
as reg_to_buy
FROM users a
INNER JOIN user_first_order b
ON a.user_id=b.user_id
ORDER BY reg_to_buy;


SELECT
case when reg_to_buy <=30 then '30天内'
when reg_to_buy <=90 then '90天内'
when reg_to_buy <=180 then '180天内'
when reg_to_buy <=365 then '1年内'
else '超过1年' end as reg_to_buy_group,COUNT(user_id)
from user_reg_to_order
group by reg_to_buy_group;

 

 代码解读

SELECT c.plan_new,count(Distinct a.user_id) total_buyers, sum(units) as total_units,sum(rev) as total_rev
FROM
orders a INNER JOIN user_reg_to_order b
ON a.user_id=b.user_id and a.order_dt=b.first_order
INNER JOIN users_new c
ON a.user_id=c.user_id
WHERE b.reg_to_buy<=90
GROUP BY c.plan_new;

 

 三、课后小结

 

 

四、随堂练习

 正确答案: 错误
解析:两端代码的连接条件是相同的,a LEFT JOIN b和bRIGHT JOIN a可以达成同样的效果

 

正确答案: 正确
解析:
在SQL中,INNER JOIN也可以被简写为JOIN 

 正确答案:错误 
解析:取的是a的全部记录b中能匹配上的部分记录,b匹配不上的部分会给null

正确答案:正确
解析:
在SQL中,多表连接可以通过JOIN实现 

 正确答案: 错误 
解析:
INNER JOIN取的是交集的部分

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肉肉肉肉肉肉~丸子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值