近期我在做路徑轉(zhuǎn)化分析,發(fā)現(xiàn)用left join嵌套查詢輸出的結(jié)果遠(yuǎn)比預(yù)計(jì)結(jié)果要大,先來看看例子:
CREATE TABLE `atext`;
USE `atext`;
CREATE TABLE `用戶行為`(
id INT,
UUID CHAR(32),
date_str DATE,
pv_sid INT,
pv_seq INT,
click_event CHAR(10)
);
LOAD DATA LOCAL INFILE 'C:\\Users\\yuankun\\Desktop\\501.csv' INTO TABLE 用戶行為 FIELDS TERMINATED BY ',';
#"用戶行為"表導(dǎo)入了2261條記錄
CREATE TABLE `用戶行為2`(
id INT,
UUID CHAR(32),
date_str DATE,
pv_sid INT,
pv_seq INT,
click_event CHAR(10)
);
LOAD DATA LOCAL INFILE 'C:\\Users\\yuankun\\Desktop\\502.csv' INTO TABLE 用戶行為2 FIELDS TERMINATED BY ',';
#"用戶行為2"表導(dǎo)入了9890條記錄
SELECT a.*,b.* FROM
(SELECT
DISTINCT
`id`
,UUID
,date_str
,pv_sid
,pv_seq
,click_event
FROM `用戶行為`) a
LEFT JOIN
(SELECT
DISTINCT
`id`
,UUID
,date_str
,pv_sid
,pv_seq
,click_event
FROM `用戶行為2`) b
ON a.uuid = b.uuid
AND a.pv_sid = b.pv_sid
#數(shù)據(jù)結(jié)果是3310條記錄呀袱,比預(yù)計(jì)應(yīng)該輸出a表的記錄2261條多了很多秦躯。
這是什么原因呢?
原因就是"用戶行為"表中的uuid 和pv_sid與"用戶行為2"表中的uuid 和pv_sid是一對(duì)多的關(guān)系盟迟,故輸出的結(jié)果會(huì)是多對(duì)多秋泳,使“用戶行為”表復(fù)制相應(yīng)的條數(shù)匹配與“用戶行為2”表已經(jīng)對(duì)應(yīng)好的記錄。
所以在每個(gè)子查詢中加入了distinct攒菠,依然會(huì)出現(xiàn)以上情況迫皱。如果去掉distinct,同樣原理辖众,會(huì)出現(xiàn)多對(duì)多的情況卓起,輸出結(jié)果會(huì)更離譜。
如何解決以上情況:
1凹炸、轉(zhuǎn)化思路戏阅,用其他的方法來計(jì)算用戶路徑轉(zhuǎn)化;
2啤它、增加唯一識(shí)別的主鍵奕筐。