日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何分析交易记录?

發(fā)布時間:2024/1/8 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何分析交易记录? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【題目】

某商場為了分析用戶購買渠道。表1是用戶交易記錄表,記錄了用戶id、交易日期、交易類型和交易金額。

表2是用戶類型表,記錄了用戶支付類型(微信、支付寶、信用卡等),分別有type1、type2。

要求:

1.請?jiān)?type1的用戶類型中,找出總交易金額最大的用戶。

2.篩選每個用戶的第2筆交易記錄。

3.如下表:如何實(shí)現(xiàn)表3的數(shù)據(jù)格式?

4.兩表做關(guān)聯(lián)時,其中一張表的關(guān)聯(lián)鍵有大量的null值會造成什么影響?如何規(guī)避?

【解題思路】

1.type1的用戶類型中,找出單用戶的總交易金額最大的一位用戶?

我們先來把這個業(yè)務(wù)需求翻譯成大白話:

1)表中的字段要有用戶類型、交易金額、用戶id

2)“單用戶的總交易金額”是指每種類型用戶的總交易金額

3)找出用戶類型=type1,總交易金額最大的用戶

1)表中的字段要有用戶類型、交易金額、用戶id

交易金額、用戶id在用戶交易記錄表中,用戶類型在用戶類型表中,涉及到兩個表的字段,所以需要進(jìn)行多表聯(lián)結(jié)。

觀察兩個表,得知兩表的相同字段為用戶id ,所以通過用戶id聯(lián)結(jié)兩張表。

使用哪種聯(lián)結(jié)呢?拿出《猴子 從零學(xué)會SQL》里面的多表聯(lián)結(jié)圖。

因?yàn)楹竺嬉治觥懊糠N類型用戶的總交易金額”,所以保留左表(用戶交易記錄表)中的全部用戶數(shù)據(jù)。

select 用戶交易記錄表.* ,用戶類型表.用戶類型 from 用戶交易記錄表 left join 用戶類型表 on 用戶交易記錄表.用戶id=用戶類型表.用戶id;

查詢結(jié)果:

2)每種類型用戶的總交易金額

當(dāng)有“每個”出現(xiàn)的時候,要想到《猴子 從零學(xué)會SQL》中講過的用分組匯總來實(shí)現(xiàn)該業(yè)務(wù)問題。

根據(jù)各用戶類型、用戶id分組 (group by),統(tǒng)計每個用戶數(shù)總費(fèi)用(求和函數(shù)sum)

select 用戶交易記錄表.*,用戶類型表.用戶類型,sum(用戶交易記錄表.交易金額) as 總金額 from 用戶交易記錄表 left join 用戶類型表 on 用戶交易記錄表.用戶id=用戶類型表.用戶id group by 用戶類型表.用戶類型,用戶交易記錄表.用戶id;

查詢結(jié)果:

3)找出用戶類型=type1,總交易金額最大的用戶

用where 篩選用戶類型=type1的用戶,按照總金額降序排序(order by decs),找出的第一行(limit 1)記錄即為交易金額最大的用戶。

select?用戶類型表.用戶類型,??用戶交易記錄表.用戶id,sum(用戶交易記錄表.交易金額)?as?總金額 from 用戶交易記錄表 left join 用戶類型表 on 用戶交易記錄表.用戶id = 用戶類型表.用戶id where 用戶類型表.用戶類型 = 'type1' group by 用戶類型表.用戶類型, 用戶交易記錄表.用戶id order by 總金額 desc limit 1;

查詢結(jié)果:

2.篩選每個用戶的第2筆交易記錄?

1)題目要求查詢“每個用戶”,當(dāng)每個出現(xiàn)的時候,就要想到分組匯總(group by或者窗口函數(shù)的partiotion ?by)。

2)第2筆交易記錄,是指按照交易時間對每個用戶的交易記錄進(jìn)行排名,然后取出排名第2的數(shù)據(jù)。

又涉及到分組,又涉及到排名的問題,要想到用《猴子 從零學(xué)會SQL》里講過的窗口函數(shù)來實(shí)現(xiàn)。

所以使用分組(窗口函數(shù)partiotion by 用戶id),并按最后交易時間升序排列(order by交易時間 asc),套入窗口函數(shù)的語法,得出下面的sql語句:

select 用戶交易記錄表.*,row_number() over(partition?by?用戶交易記錄表.用戶id?order?by?用戶交易記錄表.交易日期?asc)?as?交易筆數(shù) from?用戶交易記錄表;


查詢結(jié)果:

2)用where 篩選出每個用戶的第2條記錄,就是每個用戶的第2筆交易記錄

?

select * from (select?用戶交易記錄表.*, row_number() over(partition by 用戶交易記錄表.用戶id order by 用戶交易記錄表.交易日期 asc ) as 交易筆數(shù) from 用戶交易記錄表) as a where 交易筆數(shù)=2;

查詢結(jié)果:

3.如下表:如何實(shí)現(xiàn)表3的數(shù)據(jù)格式?

題目要求將同一用戶、不用的交易時間和交易類型多行合并為一行,用group_concat函數(shù)可解決。

sql入下:

select 用戶id, group_concat(交易日期), group_concat(交易類型) from 用戶交易記錄表 group?by?用戶id;

4.兩表做關(guān)聯(lián)時,其中一張表的關(guān)聯(lián)鍵有大量的null值會造成什么影響?如何規(guī)避?

因?yàn)樵陉P(guān)聯(lián)表中的全部數(shù)據(jù)不一定在另一張表都匹配,這樣沒有匹配到的話就會出現(xiàn)null,避免出現(xiàn)表連接出現(xiàn)null值,只要在表關(guān)聯(lián)時加一個where條件進(jìn)行判斷(not null ),具體見下圖

【本題考點(diǎn)】

1.如何將復(fù)雜的業(yè)務(wù)問題,使用多維度拆解分析方法,翻譯成大白話的能力。

2.遇到排名問題,要想到使用窗口函數(shù)來實(shí)現(xiàn)。

3.多表聯(lián)結(jié)各個情況如何去實(shí)現(xiàn)?把上圖看懂就可以解決99%的多表聯(lián)結(jié)問題了。

推薦:如何從零學(xué)會sql?

總結(jié)

以上是生活随笔為你收集整理的如何分析交易记录?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。