group by有幾個擴展

發現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進行分組.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章