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

一、用SQL拼接数据

三个初始数据

BDA初级分析——SQL多表连接应用_第1张图片

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

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

拼接数据:JOIN

join,加入

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

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

BDA初级分析——SQL多表连接应用_第2张图片

 

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

BDA初级分析——SQL多表连接应用_第3张图片

 BDA初级分析——SQL多表连接应用_第4张图片

 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==

  BDA初级分析——SQL多表连接应用_第5张图片

 INNER JOIN

保留左右表格交集的部分

BDA初级分析——SQL多表连接应用_第6张图片

BDA初级分析——SQL多表连接应用_第7张图片 

 LEFT JOIN

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

BDA初级分析——SQL多表连接应用_第8张图片

 BDA初级分析——SQL多表连接应用_第9张图片

 

RIGHT JOIN

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

BDA初级分析——SQL多表连接应用_第10张图片

 BDA初级分析——SQL多表连接应用_第11张图片

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

BDA初级分析——SQL多表连接应用_第12张图片

 代码解读

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==

BDA初级分析——SQL多表连接应用_第13张图片

 BDA初级分析——SQL多表连接应用_第14张图片

 

二、用SQL聚合数据

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

BDA初级分析——SQL多表连接应用_第15张图片

BDA初级分析——SQL多表连接应用_第16张图片 

 代码解读

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;

 BDA初级分析——SQL多表连接应用_第17张图片

 BDA初级分析——SQL多表连接应用_第18张图片

 

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

BDA初级分析——SQL多表连接应用_第19张图片

 代码解读

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;

BDA初级分析——SQL多表连接应用_第20张图片

 BDA初级分析——SQL多表连接应用_第21张图片

 代码解读

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;

BDA初级分析——SQL多表连接应用_第22张图片

 BDA初级分析——SQL多表连接应用_第23张图片

 三、课后小结

BDA初级分析——SQL多表连接应用_第24张图片

 BDA初级分析——SQL多表连接应用_第25张图片

 

四、随堂练习

BDA初级分析——SQL多表连接应用_第26张图片

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

BDA初级分析——SQL多表连接应用_第27张图片 

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

BDA初级分析——SQL多表连接应用_第28张图片

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

BDA初级分析——SQL多表连接应用_第29张图片

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

BDA初级分析——SQL多表连接应用_第30张图片

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

你可能感兴趣的:(BDA初级分析,sql,数据库)