利用 Sql 实现数据透视表功能
講過很多次,數(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ū)域每天的訂單量,就是下表這個樣子,我們該怎么做呢?
| 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é)果如下:
以上就是關(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 只狼影逝二度残留坟冢位置在哪?残留坟冢位
- 下一篇: 不要再把 pp 写出 % 了。