sql两个数字之差取最接近的_从零学DAX/Sql/Python030203SQL数据分类汇总续篇
開篇啰嗦話
上篇文章,為你介紹了SQL語句中select 的group by參數(shù)進(jìn)行分類統(tǒng)計,group by在審計數(shù)據(jù)分析過程中是必然繞不開的。因?yàn)?#xff0c;你必然離不開各種匯總計算,例如,不同產(chǎn)品的采購額、銷售額,不同年度的不同客戶的合同額,等等,其中,提到了with cube 和with rollup兩個參數(shù),今天繼續(xù)為你補(bǔ)充。從零學(xué)DAX/Sql/Python之SQL篇文章索引 | |
1 | SQL系列-01-數(shù)據(jù)庫及SQL Server基本操作 |
2 | SQL系列-02-SQL Server基本介紹及SSMS |
3 | SQL系列-03-SQL與Python集成編輯工具ADS |
4 | SQL系列-04-Select語法、別名、概覽數(shù)據(jù) |
5 | SQL系列-05-SQL數(shù)據(jù)分類匯總 |
6 | |
https://docs.microsoft.com/zh-cn/sql/t-sql/language-reference?view=sql-server-ver15
再談group by 參數(shù)with rollup/cube上篇文章中為你介紹了group by 及其參數(shù)with rollup/cube的基本用法。在實(shí)際工作中,我們往往需要添加“小計”和“總計”,如下圖所示。
上圖可以看出:
(1)group by?年度,公司名稱:僅能匯總不同年度、不同公司的聚合值;
(2)group by 年度,公司名稱?with?rollup:還能匯總每個年度全部公司的聚合值,及所有年度全部公司的聚合值。而無法匯總每個公司全部年度的聚合值(這個得用group by 公司名稱,年度 with rollup)
(3)group?by?年度,公司名稱?with?cube:在with rollup的基礎(chǔ)上還能匯總每個公司全部年度。也就是說,
group?by?年度,公司名稱?with?cube=
group?by?年度,公司名稱?with?rollup??+
group?by?公司名稱,年度?with?rollup
但是,在上篇文章中,并未顯示小計和合計,在小計和合計的地方均顯示為null-空值。
這是如何做到的呢?這就需要為你介紹sql中的一個條件判斷CASE WHEN語句:
條件判斷語句CASE?When?Then?else?endCASE WHEN條件判斷語句語法格式:case??when?條件1? then?結(jié)果1
? ? ? ? ?when?條件2??then?結(jié)果2
?? ? ? ??......
?? ? ? ??when 條件n??then 結(jié)果n
? ? ? ? ?else?結(jié)果m
end
表達(dá)的含義是:當(dāng)滿足條件1時,返回結(jié)果1,...,如果最終沒有匹配的條件,就返回結(jié)果m。
其詳細(xì)語法及介紹可參見微軟官網(wǎng):
https://docs.microsoft.com/zh-cn/sql/t-sql/language-elements/case-transact-sql?view=sql-server-ver15
下面顯示了不同招標(biāo)方式,并且將“目錄采購自動匹配”、“公開招標(biāo)”、"邀請招標(biāo)"三種招標(biāo)方式歸為“招標(biāo)”、其余招標(biāo)方式均歸為“未招標(biāo)”,sql代碼如下:
SELECT?distinct?[招標(biāo)方式]??FROM?[samples].[dbo].[采購明細(xì)]
GO
---case?when?根據(jù)不同的條件,返回不同的結(jié)果
SELECT?distinct?[招標(biāo)方式],
'招標(biāo)分類'=case?when?a.招標(biāo)方式?='目錄采購自動匹配'?then?'招標(biāo)'?
???????????????when?a.招標(biāo)方式?='公開招標(biāo)'?then?'招標(biāo)'
???????????????when?a.招標(biāo)方式?='邀請招標(biāo)'?then?'招標(biāo)'
???????????????else?'未招標(biāo)'
??????????end?????????
FROM?[samples].[dbo].[采購明細(xì)]?a
sql代碼及其結(jié)果如下圖所示。
下面是審計確定應(yīng)招未招的一個假定定義。其SQL語句為:
---應(yīng)招未招:招標(biāo)方式不是目錄采購自動匹配、公開招標(biāo)、邀請招標(biāo),且金額大于1萬SELECT?a.訂單號,a.招標(biāo)方式,a.金額,
'審計認(rèn)定的招標(biāo)類型'=case?when?a.招標(biāo)方式?='目錄采購自動匹配'?then?'應(yīng)招已招'?
???????????????when?a.招標(biāo)方式?='公開招標(biāo)'?then?'應(yīng)招已招'
???????????????when?a.招標(biāo)方式?='邀請招標(biāo)'?then?'應(yīng)招已招'
???????????????else?
???????????????????(case?when?a.金額>10000?then?'應(yīng)招未招'?
?????????????????????else?'可不招'?end)
??????????end
FROM?[samples].[dbo].[采購明細(xì)]?a
SQL語句運(yùn)行結(jié)果如下圖,然后只需篩選出“應(yīng)招未招”的采購訂單。
Tips! ?當(dāng)然,實(shí)際工作中判定應(yīng)招未招的條件會更加復(fù)雜,這就涉及到更加復(fù)雜的邏輯運(yùn)算,后面會繼續(xù)補(bǔ)充!
再談group by?with rollup/cube中的小計與合計
掌握了上述case when 語句后,就可以對group by with rollup/cube的結(jié)果中的null值,顯示小計和合計字樣。
SQL代碼如下所示:---對group?by?進(jìn)行with?rollup后的結(jié)果,增加小計和合計---年度列如果是空值null,則年度列所在的單位格顯示總計
---年度列不是空值null,并且公司名稱列是空值null,則單元格顯示小計
select?
case?when?cgmx.年度?is?null?then?'總計'?else?cgmx.年度?end?'年度',
case?when?cgmx.年度?is?not?null??and?cgmx.公司名稱?is?null?then?'小計'
?????????else?cgmx.公司名稱?end?'公司名稱',
count(cgmx.訂單號)?as?訂單數(shù)
,sum(cgmx.金額)?as?采購金額?from?[samples].[dbo].[采購明細(xì)]?cgmx
group?by?cgmx.年度,cgmx.公司名稱??with?rollup
SQL語句運(yùn)行結(jié)果如下圖
動態(tài)顯示group by的結(jié)果
在審計工作中,我們不僅需要按照不同維度,運(yùn)用group by來查看各種統(tǒng)計數(shù)據(jù),而且往往會需要以圖形的形式進(jìn)行展示,以增加感官認(rèn)識。
但是,傳統(tǒng)的圖型展示只能是靜態(tài)的,例如,在excel中,如果需要顯示不同年度的所有公司采購額和采購數(shù)量的構(gòu)成,通常的做法,只能一年做一個餅圖。如果需要顯示不同公司的所有年度的采購額和采購數(shù)量變化趨勢,通常的做法,只能一個公司做一個直線圖。
但是,python中的pyechart包給出了一個新奇的解決方案-運(yùn)用時間線的概念,可以完美的解決這個動態(tài)需要。
下圖顯示了2016年三家公司采購額和采購量構(gòu)成情況,當(dāng)你滑動底部時間線,你會可以看到2017、2018年的構(gòu)成情況。
一條線、一個頁面同時承載了不同年度的顯示!
下面給出動畫效果圖怎么樣,你是否心動了!
這要感謝pyecharts的作者之一chenjiandongx,他給與我很多的解惑。https://github.com/chenjiandongx。
這就是python的強(qiáng)大之處,如前我多次提到:我學(xué)習(xí)和研究python的最主要原因不是用它來清洗、處理數(shù)據(jù),這些用excel和sql基本可以搞定,而是用它來解決excel、sql往往很難解決的問題,這個就是其中之一!
關(guān)于上述效果的代碼我會在下下篇文章中予以介紹,它屬于python的范疇。
下一篇我會介紹python包安裝及管理的技巧,這是很多初學(xué)者最容易忽視也是最令人抓狂的問題。有了這個鋪墊后,再為你介紹這個動畫的代碼!
隨著輕輕的風(fēng)輕輕地飄
歷經(jīng)的路都會刻骨銘心
如果你覺得有用,記得點(diǎn)擊右下角“在看”按鈕,并寫下寶貴的意見,也可在公眾號下掃碼加群。
欲見詳情,靜候下文原創(chuàng)文章歡迎轉(zhuǎn)載!
請注明:本文首發(fā)于
"數(shù)字化審計"公眾號
總結(jié)
以上是生活随笔為你收集整理的sql两个数字之差取最接近的_从零学DAX/Sql/Python030203SQL数据分类汇总续篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爱又米逾期一天上征信吗
- 下一篇: python typing typesc