首页 > 解决方案 > 如何找到客户加入多个表格时订购和点击的类别?

问题描述

我有以下 5 个表格,我试图找到从他们点击的同一类别中订购的客户。条件是订单日期应大于点击日期

表:客户

email           cid         
a@gmail.com     1001            
b@gmail.com     1002            
c@gmail.com     1003
            

表:订单

cid     pid     order_date      
1001    4000    Aug-1-2021      
1002    5000    Aug-1-2021      
1003    4000    Aug-1-2021  

表:点击次数

cid     pid     click_date      
1001    4000    Jul-1-2021      
1002    8000    Jul-1-2021      
1003    8000    Jul-1-2021  

表:产品

pid     category_id         
4000    1           
8000    2           
5000    2           

表:昏暗

categorty_id    category            
1               Games           
2               Books           
3               Music   

预期成绩

email           cid     category_clicked    category_ordered
a@gmail.com     1001    games               games
b@gmail.com     1002    books               books 

c@gmail 将被排除在外,因为他订购的类别与他点击的类别不同。我无法了解如何根据类别获取数据。如果客户购买了他们点击的相同商品,我只能编写查询来获取。任何帮助表示赞赏。这是我必须准确找到客户点击并购买了相同 pid 的查询。

select distinct cust.email
From customers cust

Join orders o
on cust.cid=o.cid
join clicks c
on c.cid=o.cid and c.pid=o.pid

Join product prod
ON c.pid=prod.pid

inner join dim dim
on dim.category_id=prod.category_id
where o.order_date>=c.click_date

标签: mysqlsql

解决方案


为此,您必须加入 2 个product.
第一个副本用于从 中获取类别,orders第二个用于从 中获取类别clicks,以便可以比较它们:

SELECT c.email, c.cid, 
       d.category category_clicked,
       d.category category_ordered
FROM customers c
INNER JOIN orders o ON o.cid = c.cid
INNER JOIN product po ON po.pid = o.pid
INNER JOIN clicks cl ON cl.cid = c.cid 
INNER JOIN product pc ON pc.pid = cl.pid
INNER JOIN dim d ON d.category_id = po.category_id AND d.category_id = pc.category_id
WHERE cl.click_date <= o.order_date;

请参阅演示


推荐阅读