發現db2的group by有幾個擴展,方便cube的計算- -
A:grouping sets:用來在單個sql中形成多級分組。
例:select company_id,node_id,count(customer_id) from customer group by grouping sets(company_id,node_id)
B:rollup:可以在單個數據庫操作中形成多個分組。
例:select company_id,node_id,count(customer_id) from customer group by rollup(company_id,node_id)
注:rollup操作不是可交換的操作,指定用戶組的順序是很重要的。
C:cube: 生成分組表中分組的所有組合。
例:select company_id,node_id,count(customer_id) from customer group by cube(company_id,node_id)
D:over:移動函數可以幫助實現移動的數據分析
Select date,avg(qty) over(order by date rows between 1 preceding and 1 following) as values from sale
A:grouping sets:用來在單個sql中形成多級分組。
例:select company_id,node_id,count(customer_id) from customer group by grouping sets(company_id,node_id)
B:rollup:可以在單個數據庫操作中形成多個分組。
例:select company_id,node_id,count(customer_id) from customer group by rollup(company_id,node_id)
注:rollup操作不是可交換的操作,指定用戶組的順序是很重要的。
會針對前面這個變量來作各種情況的group by ,後一個變量則只是其中一種情況
C:cube: 生成分組表中分組的所有組合。
例:select company_id,node_id,count(customer_id) from customer group by cube(company_id,node_id)
--這個再計算cube的時候很方便,直接能給出所有組合情況的group by
並且結合coalesce()就能達到想要的cube中間數據,^_^
這個要常用,節省重複工作
D:over:移動函數可以幫助實現移動的數據分析
Select date,avg(qty) over(order by date rows between 1 preceding and 1 following) as values from sale
我們平時用的最多的就是 select sum(數量) from 表名 group by 部門,姓名 with ur;
其實db2關於group by 還有幾個其他用法,x現將學習筆記貼出來:
group by 特殊說明:
select DEPARTMENT,Name,sum(amount) as sum,count(*) as count
from sale
inner join Employee on liaohaibing.EMPLOYEE.ID = liaohaibing.SALE.EMPLOYEEID
inner join liaohaibing.DEPARTMENT on
liaohaibing.DEPARTMENT.DEPARTMENTID = liaohaibing.EMPLOYEE.DEPARTMENTID
where liaohaibing.DEPARTMENT.DEPARTMENTID in(2,4,5,9)
group by rollup(DEPARTMENT,Name);
顯示出來得結果如下表所示.
DEPARTMENT NAME SUM COUNT
184780 128
後勤部門 58554 48
開發部門 48625 32
資產管理部門 77601 48
後勤部門 fff 15033 16
後勤部門 ggg 18000 16
後勤部門 qqq 25521 16
開發部門 lhb 26293 16
開發部門 liaohaibing 22332 16
資產管理部門 ccc 28936 16
資產管理部門 ddd 28033 16
資產管理部門 eee 20632 16
Rollup
GROUP BY ROLLUP(DEPARTMENT,NAME)
第一是按把所有和顯示到第一行。
第二是按GROUP BY DEPARTMENT 這種情況顯示出來,這裏是按部門進行分組。
第三是按GROUP BY DEPARTMENT,NAME情況顯示出來,這裏是按某部門中得名字進行分組得
還有個 參數:CUBE ,
例子: SELECT SALES_DATE, SALES_PERSON,
SUM(SALES) AS UNITS_SOLD
-- ,GROUPING(SALES_DATE) AS DATE_GROUP,
-- GROUPING(SALES_PERSON) AS SALES_GROUP
FROM SALES
GROUP BY cube (SALES_DATE, SALES_PERSON)
-- ORDER BY SALES_DATE, SALES_PERSON ;
Cube:
GROUP BY cube (SALES_DATE, SALES_PERSON)
第一是按把所有和顯示到第一行。
第二是按 group by SALES_DATE 這種情況分組
第三是按group by sales_person這種情況分組
第四是按group by sales_date,sales_person分組.
另外一個參數爲 group by sets
SELECT SALES_DATE, SALES_PERSON,
SUM(SALES) AS UNITS_SOLD
-- ,GROUPING(SALES_DATE) AS DATE_GROUP,
-- GROUPING(SALES_PERSON) AS SALES_GROUP
FROM SALES
GROUP BY GROUPING SETS (SALES_DATE, SALES_PERSON,())
-- ORDER BY SALES_DATE, SALES_PERSON ;
GROUPING SETS
GROUP BY GROUPING SETS (SALES_DATE, SALES_PERSON,())
第一是按把所有和顯示到第一行
第二時候按 group by sales_date進行分組
第三是按group by sales_person進行分組.