达梦cube和rollup函数使用

本文介绍了如何在达梦数据库中使用GROUP BY ROLLUP和CUBE进行复杂的数据分析,通过实例展示了如何获取公司员工按城市、部门和所有层级的分布及薪资情况。Rollup仅聚合至下一层,而Cube则进一步包括所有可能的组合,提供了全面的透视视图。
摘要由CSDN通过智能技术生成

在使用前需要安装达梦数据库,并创建示例库DMHR

● ROLLUP ●

比如获取公司各城市每个部门员工人数分布和薪资分布情况,使用group by rollup的sql样例参考如下:

从结果集中可以看出group by rollup聚合了城市和部门组合,城市组合,所有组合三种情况。输出结果展示如下:

SELECT
        C.CITY_NAME                                                 ,
        DEPT.DEPARTMENT_NAME                                        ,
        COUNT(                       *) TOAL_PERSONNUM              ,
        ROUND((RATIO_TO_REPORT(COUNT(*))OVER())*100, 2) PERSON_RATIO,
        SUM(EMP.SALARY) TOTAL_SALARY                                ,
        ROUND((RATIO_TO_REPORT(SUM(EMP.SALARY))OVER())*100, 2) SAL_RATIO
FROM
        DMHR.EMPLOYEE EMP   ,
        DMHR.DEPARTMENT DEPT,
        DMHR.LOCATION L     ,
        DMHR.CITY C
WHERE
        EMP.DEPARTMENT_ID = DEPT.DEPARTMENT_ID(+)
    AND DEPT.LOCATION_ID  = L.LOCATION_ID(+)
    AND L.CITY_ID         = C.CITY_ID(+)
GROUP BY
        ROLLUP (C.CITY_NAME, DEPT.DEPARTMENT_NAME);

结果集如下

从结果集中可以看出group by rollup聚合了城市和部门组合,城市组合,所有组合三种情况。输出结果展示如下:

● CUBE ●

上例中的sql将rollup换成cube,sql样例参考如下:

select
        c.city_name                                                 ,
        dept.department_name                                        ,
        count(                       *) toal_personnum              ,
        round((ratio_to_report(count(*))over())*100, 2) person_ratio,
        sum(emp.salary) total_salary                                ,
        round((ratio_to_report(sum(emp.salary))over())*100, 2) sal_ratio
from
        DMHR.employee emp   ,
        DMHR.department dept,
        DMHR.location l     ,
       DMHR.city c
where
        emp.department_id = dept.department_id(+)
    and dept.location_id  = l.location_id(+)
    and l.city_id         = c.city_id(+)
group by
        cube (c.city_name, dept.department_name);

结果集如下:

 从结果集中可以看出group by cube聚合了城市和部门组合,城市组合,部门组合,所有组合四种情况。结果集展示如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值