如何利用SQL求取微信的共同好友数?
「哎呀,我們竟然有共同好友」
「哎呀,沒想到你們也認識」
經常在朋友圈評論區能夠看到類似的評論,這些評論反映的其實就是共同好友這個概念。那如果你是負責微信的數據分析師,現在業務方想看下微信中任意兩個人之間有多少個共同好友,應該怎么看呢?
我們先創建一個模擬數據表,創建代碼如下:
create?table?weixin_friends? (uid?bigint, tuid?bigint);insert?into?weixin_friends?(uid,tuid)? values? (100,200), (100,300), (100,400), (200,100), (200,300), (200,400), (300,100), (300,200), (400,100)通過上述代碼就創建了好友關系表weixin_friends,該表的詳細(模擬)數據如下:
| 100 | 200 |
| 100 | 300 |
| 100 | 400 |
| 200 | 100 |
| 200 | 300 |
| 200 | 400 |
| 300 | 100 |
| 300 | 200 |
| 400 | 100 |
uid表示每個用戶在微信后臺的用戶id,tuid表示uid對應的微信好友id,現在我們要通過這張表查詢出任意兩個人之間的共同好友數,應該怎么做呢?
想一下,如果現在需要我們人工找出上表中任意兩個人的共同好友的話,你會怎么做呢?
我會先從tuid著手,看下每一個tuid是哪些人的共同好友,也就是tuid鏈接了哪些人?
| 200 | 100 | 300 |
| 300 | 100 | 200 |
| 400 | 100 | 200 |
| 100 | 200 | 300 |
| 100 | 200 | 400 |
| 100 | 300 | 400 |
如果我們能整理出上表這樣的話,任意兩個人的共同好友數就一目了然了,只需要按照好友1、好友2同時group by,然后count(tuid)就可以得到任意兩個用戶的共同好友數了。
那我們怎么樣才可以得到上面這張的表呢?那就是把表weixin_friends通過tuid進行自連接,實現代碼如下:
select?t1.uid?t1_uid,t1.tuid?t1_tuid,t2.uid?t2_uid,t2.tuid?t2_tuid from?(select?uid,tuid?from?weixin_friends)?t1? join?(select?uid,tuid?from?weixin_friends)?t2? on?t1.tuid?=?t2.tuid運行上面代碼會得到如下結果:
上面結果存在兩個問題,一個是自己和自己是共同好友(紅框圈出來的部分),即t1_uid = t2_uid,另外一個就是AB和BA是兩條記錄(綠框圈出來的部分),實際上背后是相同的兩個人。為了解決這兩個問題,我們就需要對t1_uid和t2_tuid進行限制,代碼如下:
select?t1.uid?t1_uid,t1.tuid?t1_tuid,t2.uid?t2_uid,t2.tuid?t2_tuid from?(select?uid,tuid?from?weixin_friends)?t1? join?(select?uid,tuid?from?weixin_friends)?t2? on?t1.tuid?=?t2.tuid?and?t1.uid?<?t2.uid運行上面代碼會得到如下結果:
然后再針對這個表中的t1_uid、t2_uid同時進行group by即可,實現代碼如下:
select?t1_uid,t2_uid,count(t1_tuid)?cnt from?(select?t1.uid?t1_uid,t1.tuid?t1_tuid,t2.uid?t2_uid,t2.tuid?t2_tuidfrom?(select?uid,tuid?from?weixin_friends)?t1?join?(select?uid,tuid?from?weixin_friends)?t2?on?t1.tuid?=?t2.tuid?and?t1.uid?<?t2.uid)t? group?by?t1_uid,t2_uid運行上面代碼會得到如下結果:
這就是我們想要的任意兩個用戶之間的共同好友數了。
對比Excel系列圖書累積銷量達15w冊,讓你輕松掌握數據分析技能,感興趣的同學可以點擊下方鏈接了解:
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的如何利用SQL求取微信的共同好友数?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电信dict是什么意思啊(weixin)
- 下一篇: 永久魔王多少点券