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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

利用 Sql 实现数据透视表功能

發(fā)布時間:2023/12/19 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用 Sql 实现数据透视表功能 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

講過很多次,數(shù)據(jù)分組和數(shù)據(jù)透視表很像,Sql 中的數(shù)據(jù)分組大家應(yīng)該都很熟悉了,用的就是 group by。數(shù)據(jù)透視表是作為一個數(shù)據(jù)分析師最基本,也是使用頻率最高的一個功能了,我們可以把明細(xì)數(shù)據(jù)從數(shù)據(jù)庫導(dǎo)出來,然后在 Excel 里面做透視表,也可以直接在數(shù)據(jù)庫里面做透視表,然后將透視結(jié)果進行導(dǎo)出。這篇我們來看看 Sql 中的數(shù)據(jù)透視表怎么做,這里以 Mysql 數(shù)據(jù)庫為例。

要講怎么在 Sql 中做透視表,我們還是先看看什么是透視表,其實透視表的核心就是按照行列同時分組,然后對分組后的值進行某種匯總運算。

現(xiàn)在有這么一張表 t,存儲的字段如下:

orderid???price???date???????area S001??????10??????2019/1/1???A區(qū) S002??????20??????2019/1/1???B區(qū) S003??????30??????2019/1/1???C區(qū) S004??????40??????2019/1/2???A區(qū) S005??????10??????2019/1/2???B區(qū) S006??????20??????2019/1/2???C區(qū) S007??????30??????2019/1/3???A區(qū) S008??????40??????2019/1/3???C區(qū)

現(xiàn)在我們想看一下每個區(qū)域每天的訂單量,就是下表這個樣子,我們該怎么做呢?

A區(qū)B區(qū)C區(qū)
2019/1/1
2019/1/2
2019/1/3

如果要是在 Excel 中做的話就很簡單,直接做一個透視表就ok了,把 date 拖到行那個框,將 area 拖到列那個框,將 orderid 拖到值那個框,然后對 orderid 進行計數(shù)運算即可。

在 Sql 中,如果我們只是看每一天的訂單量的話是不是只需要直接按照成交日期進行 group by 就行,Sql 語句如下:

select,date,count(orderid) fromt group?by?date

現(xiàn)在我們想看一下每個區(qū)域每天的一個成交情況,那是不是在上面代碼的基礎(chǔ)上再加一個用來判斷區(qū)域的一個條件,就可以得出每個區(qū)域的情況了。

select,date,count(case?when?area?=?"A區(qū)"?then?orderid?end)?as?"A區(qū)",count(case?when?area?=?"B區(qū)"?then?orderid?end)?as?"B區(qū)",count(case?when?area?=?"C區(qū)"?then?orderid?end)?as?"C區(qū)" fromt group?by?date

最后結(jié)果如下:

?????????A區(qū)??B區(qū)??C區(qū) 2019/1/1??1???1????1 2019/1/2??1???1????0 2019/1/3??1???1????1

當(dāng)然了,聚合函數(shù)不止可以用 count,還可以用別的聚合函數(shù),比如說,我們想看一下每個區(qū)域每一天的營業(yè)額,就是所有訂單的 price 相加。Sql 代碼如下:

select,date,sum(case?when?area?=?"A區(qū)"?then?price?else?0?end)?as?"A區(qū)",sum(case?when?area?=?"B區(qū)"?then?price?else?0??end)?as?"B區(qū)",sum(case?when?area?=?"C區(qū)"?then?price?else?0??end)?as?"C區(qū)" fromt group?by?date


最后結(jié)果如下:

??????????A區(qū)??B區(qū)??C區(qū) 2019/1/1??10???20???30 2019/1/2??40???10???20 2019/1/3??30???0????40

以上就是關(guān)于利用 Sql 做數(shù)據(jù)透視表的一個基本講解,用 case when 這種方法雖然可以實現(xiàn)數(shù)據(jù)透視表的功能,但是無論從代碼量還是運行速度方面都不是特別理想,如果大家有別的更好的方法,歡迎評論區(qū)一起交流。

點分享

點收藏

點點贊

點在看

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的利用 Sql 实现数据透视表功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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