最近在製作報表時,遇到乙個稍稍複雜一點的報表需求,即使用者希望報表能對統計的資料進行分類小計,如下:
而我之前的統計都是使用
group by
來對資料進行簡單的彙總,如下:
所以對這樣的新的需求覺得一時無從下手,詢問了同事後才知道,可以使用
rollup
統計函式
(也稱分析函式
)來解決這個問題,查詢資料後一試,發現果然可以,在此簡單介紹一下。
rollup
運算子(在生成包含小計和合計的報表時很有用)是
select
和group by
子句的一部分,它生成的結果集中,即包括每個專案的明細行也包括每個組的彙總行,彙總行顯示了該組的聚合合計。
group by
子句可用於生成只包含各組的聚合而不包含其明細行的結果。使用方法為:
select a, b, sum(fee) from t group by a, b with rollup。
下面介紹一下
rollup
的統計規則,比如如果要對
(a,b,c)
三個字段進行
rollup
匯**計的話,那麼它會先對
(a,b,c)
三個字段進行匯**計,然後對
(a,b)
欄位匯**計並空出字段
c對應的位置,然後對
(a)字段進行匯**計並空出b、
c欄位對應的位置,而空出的位置我們可以使用
grouping
函式來進行判斷,如果為「
1」,則說明該空值為
rollup
製造,否則為「0」。
通過上面的描述,可以看出,當將
rollup
的字段從上往下列出時,它會每次將最後乙個字段去掉,然後取前面的字段進行匯**計,所以稱為上捲統計,例:
select case when grouping(spname)=1 then '
合計' else spname end,
case when grouping(opname)=1 and grouping(spname)=0 then '
小計' else opname end,
sum(sumfare)
from tb_wap_stat_fare
group by spname, opname with rollup
說到了rollup
就不得不說下
cube
,因為cube
與rollup
功能相似但更為複雜,他們的使用方法都是一樣的,但是生成結果集卻有所不同。再以上面的對
(a,b,c)
三個字段進行
cube
匯**計為例,那麼它會先對
(a,b,c)
三個字段進行匯**計,然後分別對
(a,b)
、(a,c)
、(b,c)
字段進行匯通統計並空出未進行匯**計的字段對應的值,然後分別對
(a)、
(b)、
(c)進行匯**計並空出未進行匯**計的字段對應的值。
也就是說,
cube
是將進行統計的所有欄位的所有可能的組合進行匯**計,這就是它區別於
rollup
的地方。
使用SQL語句對資料進行MD5加密
如果資料庫表user中有一列為passwd,存放的是md5加密的資料,如何更新新的資料。update user set passwd md5 123321 where uname lihua 插入新的資料 insert into user uname,passwd values xiaoqiang ...
使用sql對資料庫進行簡單的增刪改查
1.建立表 create table 表名 列名 列的型別,列名 列的型別,列名 列的型別 注意自後一列不能加 2.修改表 修改表名 rename 舊表名 to 新錶名 增加列 alter table 表名 add 列名 列的型別 修改列 alter table 表名 modify 列名 列的型別 ...
SQL使用操作符對資料進行分類
一 什麼是sql裡的操作符 操作符是乙個保留字或字元,主要用於sql語句的where子句來執行操作。操作符 比較操作符 邏輯操作符 求反操作符 算術操作符。二 比較操作符 比較操作符用於在sql語句裡對單個值進行測試 比較操作符 1 操作符在sql語句裡比較乙個值與另乙個值,表示相等。2 在sql語...