資料倉儲開發報表常用函式—ROLLUP和GROUPING
在報表開發中常用到小記,合計這樣統計功能,經常看到網上談論GROUPING,GROUPING SET,ROLLUP,CUBE等函式的使用,當時也沒有足夠的資料試驗,目前在專案裡也時常用到這樣的報表函式,有些心得就記錄下來與大家分享下
其實各報表函式統計方法方式十分相似,掌握最基本的其他自然也就瞭然於胸。這裡介紹下本人專案中實際使用過的報表函式ROLLUP和GROUPING和配合使用
專案中需要按支社,辦事處統計出當月所有產品的銷量情況。比如這裡的報表格式是
支社CODE | 支社 | 辦事處CODE | 辦事處 | TTL | |
Qty | % |
且需要三個型別的統計結果,1報告每月裡支社和辦事處的銷量總和;2每月裡支社內所有辦事處的銷量總和(小計);3每月裡所有支社和辦事處的銷量總和(總計)
因此一般的統計方法必然是
SELECT
,T1.BRNC_ID
,MAX(T1.BRNC_NM) BRNC_NM
,GROUPING(T1.BRNC_ID) GR_BRNC_ID
,T1.OFFC_ID
,MAX(T1.OFFC_NM) OFFC_NM
,GROUPING(T1.OFFC_ID) GR_OFFC_ID
,SUM(T1.PSI_VAL) TTL_VAL
,MAX(T1.PSI_VAL_OV_TTL)
TTL_VAL_OV
……
FROM T_MART T1
GROUP BY T1.BRNC_ID,T1.OFFC_ID
UNION ALL
SELECT
,T1.BRNC_ID
,MAX(T1.BRNC_NM) BRNC_NM
,GROUPING(T1.BRNC_ID) GR_BRNC_ID
,T1.OFFC_ID
,MAX(T1.OFFC_NM) OFFC_NM
,GROUPING(T1.OFFC_ID) GR_OFFC_ID
,SUM(T1.PSI_VAL) TTL_VAL
,MAX(T1.PSI_VAL_OV_TTL)
TTL_VAL_OV
FROM T_MART T1
GROUP BY T1.BRNC_ID
UNION ALL
SELECT
,T1.BRNC_ID
,MAX(T1.BRNC_NM) BRNC_NM
,GROUPING(T1.BRNC_ID) GR_BRNC_ID
,T1.OFFC_ID
,MAX(T1.OFFC_NM) OFFC_NM
,GROUPING(T1.OFFC_ID) GR_OFFC_ID
,SUM(T1.PSI_VAL) TTL_VAL
,MAX(T1.PSI_VAL_OV_TTL) TTL_VAL_OV
FROM T_MART T1
因此對這種重複的冗長的SQL就可以使用報表函式如ROLLUP,我們把上面sql改成ROLLUP語句
SELECT
T1.BRNC_ID
,MAX(T1.BRNC_NM) BRNC_NM
,GROUPING(T1.BRNC_ID)
GR_BRNC_ID
,T1.OFFC_ID
,MAX(T1.OFFC_NM) OFFC_NM
,GROUPING(T1.OFFC_ID) GR_OFFC_ID
,SUM(T1.PSI_VAL) TTL_VAL
,MAX(T1.PSI_VAL_OV_TTL) TTL_VAL_OV
……
FROM
T_MART T1
GROUP BY ROLLUP(T1.BRNC_ID,T1.OFFC_ID)
看看語句是不是少了很多,而SELECT 中有個grouping函式,這個就是用來確定統計結果中哪些統計的結果是按月統計的,哪些是小計,哪些是總和了,可以將grouping的欄位輸出檢視對應統計結果
GR_BRNC_ID | GR_OFFC_ID | BRNC_ID | OFFC_ID | BRNC_NM | OFFC_NM | TTL_VAL |
1 | 1 | SCIC | TTL | SCIC | TTL | 1641201 |
0 | 1 | S610 | TTL | SEBJ | TTL | 429502 |
0 | 0 | S610 | CB0002 | SEBJ | 北京 | 153110 |
GR_BRNC_ID |
GR_OFFC_ID |
BRNC_ID |
OFFC_ID |
BRNC_NM |
OFFC_NM |
TTL_VAL |
1 |
1 |
SCIC |
|
|
|
1641201 |
0 |
1 |
S6 |
|
|
429502 |
|
0 |
0 |
S610 |
|
|
|
|
|
|
|
||||
|
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/750077/viewspace-1613115/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分析函式 - ROLLUP和GROUPING SETS函式
- 解析數倉OLAP函式:ROLLUP、CUBE、GROUPING SETS函式
- Oracle的rollup、cube、grouping sets函式Oracle函式
- MySQL8.0-分組函式ROLLUP的基本用法(GROUPING)MySql函式
- 資料庫開發---常用物件-函式資料庫物件函式
- rollup函式函式
- 分析函式 - CUBE和GROUPING SETS函式
- GROUP BY中ROLLUP/CUBE/GROUPING/GROUPING SETS使用示例
- 設計資料倉儲和資料倉儲的粒度
- 資料倉儲(8)數倉事實表和維度表技術
- iOS開發資料庫篇—SQLite常用的函式iOS資料庫SQLite函式
- Grouping函式使用函式
- 資料倉儲專題(4)-分散式資料倉儲事實表設計思考---討論精華分散式
- MySQL資料庫中的分組函式ROLLUPMySql資料庫函式
- 資料庫和資料倉儲資料庫
- NoSQL 和資料倉儲SQL
- 分散式資料倉儲中,全域性和區域性資料倉儲有何區別?分散式
- iOS開發常用函式iOS函式
- 資料倉儲之拉鍊表
- 分析函式 - GROUPING SETS函式
- 【ROLLUP】Oracle分組函式之ROLLUP魅力Oracle函式
- 資料倉儲和後設資料
- 談談資料湖和資料倉儲
- 淺談資料倉儲和大資料大資料
- 分析函式 - GROUPING_ID函式
- SQL 2012 Group By Rollup, GroupingSQL
- 資料倉儲—資料倉儲—Sybase IQ 介紹
- BI, 資料倉儲,ETL, 資料開發,有什麼區別
- 資料倉儲
- 資料倉儲之拉鍊表設計
- 開發常用的輔助函式函式
- php開發常用函式總結PHP函式
- oracle開發常用到的函式Oracle函式
- 大資料和資料倉儲解決方案大資料
- OLAP和資料探勘——資料倉儲手冊
- 資料倉儲—報表工具—MicroStrategy 介紹ROS
- group by中rollup的以及grouping含義解析
- 資料庫開發---常用物件-儲存過程資料庫物件儲存過程