利用 Sql 实现数据透视表功能
講過很多次,數(shù)據(jù)分組和數(shù)據(jù)透視表很像,Sql 中的數(shù)據(jù)分組大家應(yīng)該都很熟悉了,用的就是 group by。數(shù)據(jù)透視表是作為一個(gè)數(shù)據(jù)分析師最基本,也是使用頻率最高的一個(gè)功能了,我們可以把明細(xì)數(shù)據(jù)從數(shù)據(jù)庫(kù)導(dǎo)出來,然后在 Excel 里面做透視表,也可以直接在數(shù)據(jù)庫(kù)里面做透視表,然后將透視結(jié)果進(jìn)行導(dǎo)出。這篇我們來看看 Sql 中的數(shù)據(jù)透視表怎么做,這里以 Mysql 數(shù)據(jù)庫(kù)為例。
要講怎么在 Sql 中做透視表,我們還是先看看什么是透視表,其實(shí)透視表的核心就是按照行列同時(shí)分組,然后對(duì)分組后的值進(jìn)行某種匯總運(yùn)算。
現(xiàn)在有這么一張表 t,存儲(chǔ)的字段如下:
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)在我們想看一下每個(gè)區(qū)域每天的訂單量,就是下表這個(gè)樣子,我們?cè)撛趺醋瞿?#xff1f;
| 2019/1/1 | |||
| 2019/1/2 | |||
| 2019/1/3 |
如果要是在 Excel 中做的話就很簡(jiǎn)單,直接做一個(gè)透視表就ok了,把 date 拖到行那個(gè)框,將 area 拖到列那個(gè)框,將 orderid 拖到值那個(gè)框,然后對(duì) orderid 進(jìn)行計(jì)數(shù)運(yùn)算即可。
在 Sql 中,如果我們只是看每一天的訂單量的話是不是只需要直接按照成交日期進(jìn)行 group by 就行,Sql 語句如下:
select,date,count(orderid) fromt group?by?date現(xiàn)在我們想看一下每個(gè)區(qū)域每天的一個(gè)成交情況,那是不是在上面代碼的基礎(chǔ)上再加一個(gè)用來判斷區(qū)域的一個(gè)條件,就可以得出每個(gè)區(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ù),比如說,我們想看一下每個(gè)區(qū)域每一天的營(yíng)業(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ù)透視表的一個(gè)基本講解,用 case when 這種方法雖然可以實(shí)現(xiàn)數(shù)據(jù)透視表的功能,但是無論從代碼量還是運(yùn)行速度方面都不是特別理想,如果大家有別的更好的方法,歡迎評(píng)論區(qū)一起交流。
點(diǎn)分享
點(diǎn)收藏
點(diǎn)點(diǎn)贊
點(diǎn)在看
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的利用 Sql 实现数据透视表功能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 只狼影逝二度残留坟冢位置在哪?残留坟冢位
- 下一篇: 不要再把 pp 写出 % 了。