在數(shù)據(jù)分析的過(guò)程中挖腰,想要從數(shù)據(jù)中洞察機(jī)會(huì),一般就需要對(duì)數(shù)據(jù)不斷展開(kāi)下鉆练湿,分不同維度查看核心的數(shù)據(jù)漏斗猴仑。比如不同年齡段、不同城市肥哎、不同購(gòu)買(mǎi)力辽俗、不同性別、XXX的瀏覽轉(zhuǎn)化率篡诽。
作為技術(shù)人員崖飘,肯定不能停留在知道怎么分析上,還需要知道要怎么高效簡(jiǎn)單的做這件事情杈女。怎么做呢朱浴?
- 簡(jiǎn)單的方式是SQL的Group By + UNIAON ALL
- 高級(jí)一點(diǎn)的方式是Grouping SETS
當(dāng)維度足夠多的時(shí)候使用Grouping SETS,可以減少重復(fù)代碼的編寫(xiě)达椰;
Demo
準(zhǔn)備1+N張表:
- table_a 1張業(yè)務(wù)數(shù)據(jù)表翰蠢,userid + 業(yè)務(wù)數(shù)據(jù)
- table_b N張用戶維表,可以放到一張大寬表中啰劲,也可以按需分布在不同的表中梁沧。存儲(chǔ)用戶的年齡、性別蝇裤、城市等信息
userid 瀏覽數(shù) 購(gòu)買(mǎi)數(shù)
1 1 0
2 1 0
3 1 0
4 1 1
Group By + UNION ALL方式
CREATE VIEW tmp_result AS
select
a.userid
,a.瀏覽數(shù)
,a.購(gòu)買(mǎi)數(shù)
,b.年齡
,b.性別
,b.購(gòu)買(mǎi)力
from table_a
LEFT JOIN table_b
on a.userid = b.userid
SELECT 年齡 as cate,sum(瀏覽數(shù)),sum(購(gòu)買(mǎi)數(shù)) from tmp_result GROUP BY 年齡
UNION ALL
SELECT 性別 as cate,sum(瀏覽數(shù)),sum(購(gòu)買(mǎi)數(shù)) from tmp_result GROUP BY 性別
UNION ALL
SELECT 城市 as cate,sum(瀏覽數(shù)),sum(購(gòu)買(mǎi)數(shù)) from tmp_result GROUP BY 城市
GROUPING SETS方式
CREATE VIEW tmp_result AS
select
a.userid
,a.瀏覽數(shù)
,a.購(gòu)買(mǎi)數(shù)
,b.年齡
,b.性別
,b.購(gòu)買(mǎi)力
from table_a
LEFT JOIN table_b
on a.userid = b.userid
SELECT 年齡廷支,性別,城市,sum(瀏覽數(shù)),sum(購(gòu)買(mǎi)數(shù)) FROM tmp_result
GROUP BY 年齡栓辜,性別恋拍,城市
GROUPING SETS(
(年齡),(性別),(城市)
)
小結(jié)
分維度查看不同和數(shù)據(jù)就是SQL的Group BY,當(dāng)維度太多的時(shí)候使用Grouping Sets啃憎。