006-VLOOKUP與JOIN

VLOOKUP

假設你有兩個Excel表格麻车,其中一個為用戶信息表:

name,gender动猬,age
小A赁咙,男,20
小B彼水,男凤覆,21
小C,女盯桦,22
小D拥峦,女,23

另外一個為用戶購買明細表:

name事镣,order_no璃哟,order_amount
小A,1随闪,1000
小A,2撮奏,500
小D,3泽疆,800
小D玲献,4,900
小C瓢娜,5礼预,700
小C,6褒颈,1100
小C获高,7,1200
小B淤井,8摊趾,1400

具體Excel如下:

兩張表格

現(xiàn)在,有個需求是止吐,求出不同性別的客單價侨糟。
對于excel來說呢,首先第一步給每個訂單算出性別不同,這里就需要用到vlookup了:
vlookup

公式為VLOOKUP(E3,A:C,2,FALSE)二拐,表示需要查找的值為E3(小A)、查找范圍為A:C(A列 到 C列)百新、輸出第二列的值,不使用模糊搜索饭望。然后依次求值澜倦,我們就得到了帶有性別的購買明細表格。
怎么求分性別的客單價呢杰妓?因為這個涉及到了聚合(按性別聚合),所以我們想到使用透視表:
透視表求分性別客單價

JOIN

如果剛剛的兩個Excel表格是MySQL表呢碘勉?我們要怎么樣才能把兩個表的數(shù)據(jù)放在一起呢巷挥?SQL提供了一個方案是JOIN。JOIN的用法是:

SELECT * 
FROM <表名> 
JOIN <表名> ON <表達式>
JOIN <表名> ON <表達式>
...

FROM 后面可以接多個JOIN验靡,每個JOIN后面緊跟一個表名倍宾,然后是ON,后面緊跟一個表達式胜嗓。
JOIN的邏輯是把FROM里面的表和JOIN的表高职,拼接成一個新表,然后符合ON表達式的行留下怔锌,其他的丟棄。那么怎樣拼接的呢变过?

拼接方案

拼接方案為:

A表的每一行和B表的每一行組合出所有可能埃元,所有可能性匯成一張表。

假設FROM表有N行媚狰,X個字段岛杀,JOIN表有M行Y個字段,那么拼接后的表每一行都有X+Y個字段崭孤,然后總共有N*M行类嗤。舉例:

A表
A_col1,A_col2
A11,A12
A21,A22

B表
B_col1,B_col2
B11,B12
B21,B22
B31,B33

拼接后的表為:

A11,A12,B11,B12
A11,A12,B21,B22
A11,A12,B31,B33
A21,A22,B11,B12
A21,A22,B21,B22
A21,A22,B31,B33

枚舉所有的組合可能性,每一行都有2+2個字段辨宠,然后剛好2*3行遗锣。

篩選

拼接之后要篩選,是利用ON后面的表達式來篩選的彭羹。比如我們要得到帶有性別的購買明細表黄伊,那么SQL如下:

SELECT * FROM 購買明細 JOIN 用戶信息 ON 購買明細.name = 用戶信息.name

拼接表完畢之后是:

小A,1派殷,1000还最,小A墓阀,男,20
小A拓轻,1斯撮,1000,小B扶叉,男勿锅,21
小A,1枣氧,1000溢十,小C,女达吞,22
小A张弛,1,1000酪劫,小D吞鸭,女,23
小A覆糟,2刻剥,500,小A滩字,男造虏,20
小A,2麦箍,500酗电,小B,男内列,21
小A撵术,2,500话瞧,小C嫩与,女,22
小A交排,2划滋,500,小D埃篓,女处坪,23
....
(僅顯示部分)

其中滿足購買明細.name = 用戶信息.name僅有這些列:

小A,1,1000同窘,小A玄帕,男,20
小A想邦,2裤纹,500,小A丧没,男鹰椒,20
...
(僅顯示部分)

這就是我們這條SQL跑出來的結果。這樣看上去比較雜亂呕童,因為名字顯示了兩次漆际,還有我們不想要的年齡信息,所以優(yōu)化一下SQL:

SELECT 
購買明細.name, 
order_no, 
order_amount, 
gender
FROM 購買明細 
JOIN 用戶信息 ON 購買明細.name = 用戶信息.name
(注意name字段需要指定表名夺饲,因為兩張表都有name字段灿椅,如果不指定系統(tǒng)會不知道用哪張表的name字段)

這就得到了我們想要的結果:

小A,1钞支,1000,男
小A操刀,2烁挟,500,男
...
(僅顯示部分)

當然骨坑,我們的目標是求出分性別的客單價撼嗓,那么再使用熟悉的GROUP BY即可:

SELECT gender, avg(order_amount)
FROM 購買明細 
JOIN 用戶信息 ON 購買明細.name = 用戶信息.name
GROUP BY gender

總結

FROM只能從一個表里面拿數(shù)據(jù),會有諸多限制欢唾。所以可以把JOIN看做是對FROM的補充且警,通過JOIN,F(xiàn)ROM可以從多個表拿數(shù)據(jù)礁遣。整個SQL求值順序為:

JOIN拼接 => ON篩選 => WHERE過濾 => GROUP BY聚合 
=> ORDER BY排序 => LIMIT限制輸出 => SELECT表達式求值
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末斑芜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子祟霍,更是在濱河造成了極大的恐慌杏头,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沸呐,死亡現(xiàn)場離奇詭異醇王,居然都是意外死亡,警方通過查閱死者的電腦和手機崭添,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門寓娩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事棘伴∧海” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵排嫌,是天一觀的道長畸裳。 經常有香客問我,道長淳地,這世上最難降的妖魔是什么怖糊? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮颇象,結果婚禮上伍伤,老公的妹妹穿的比我還像新娘。我一直安慰自己遣钳,他們只是感情好扰魂,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蕴茴,像睡著了一般劝评。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上倦淀,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天蒋畜,我揣著相機與錄音,去河邊找鬼撞叽。 笑死姻成,一個胖子當著我的面吹牛,可吹牛的內容都是我干的愿棋。 我是一名探鬼主播科展,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼糠雨!你這毒婦竟也來了才睹?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤甘邀,失蹤者是張志新(化名)和其女友劉穎砂竖,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鹃答,經...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡乎澄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了测摔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片置济。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡解恰,死狀恐怖,靈堂內的尸體忽然破棺而出浙于,到底是詐尸還是另有隱情护盈,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布羞酗,位于F島的核電站腐宋,受9級特大地震影響,放射性物質發(fā)生泄漏檀轨。R本人自食惡果不足惜胸竞,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望参萄。 院中可真熱鬧卫枝,春花似錦、人聲如沸讹挎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽筒溃。三九已至马篮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間怜奖,已是汗流浹背浑测。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留烦周,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓怎顾,卻偏偏與公主長得像读慎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子槐雾,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355