首先我们都应该知道分组求和要用到这个group by,而这也是她最普遍的用法。

SELECT hi.descriptions, SUM(nvl(hi.qty, 0))FROM hcm_items hiWHERE 1 = 1GROUP BY hi.descriptions

可能难点还有集合内求和,用于求结果集中同类和

select sum(alias.assemble_qty) over (partition by alias.WORKCELL_ID)
from EMT_ISSUE_PROCESS_ACT alias
where 1 = 1;

上面的是group by的常用用法,接下来就简单说一下她的一些升级用法,集体什么效果就不一一贴图示呢,想要知道效果,还是得自己尝试,毕竟经过自己手的东西,才有可能成为自己的东西,简单说完升级用法,再来仔细说我想要说的加点料,因为除了特殊料之外,其他的很多人都已经做过了,并且很多人也吃过了。

  • 在Group By 中使用Rollup 产生常规分组汇总行 以及分组小计:

Group By Rollup(字段A,字段B),Rollup 后面跟了n个字段,就将进行n+1次分组,从右到左每次减少一个字段进行分组;然后进行 union

  • 在Group By 中使用Cube  产生Rollup结果集 + 多维度的交叉表数据源:

Group By Cube(字段A,字段B),   Cube 后面跟了n个字段,就将进行2的N次方的分组运算;然后进行 union

除此之外还有GROUPING函数和Grouping Set方法,这两个用的相对较少,前一个是看行列分组情况的,后一个可以代替多次union,需要详细了解的可以去其他地方看看,这里就 不多做解释了,原谅博主的懒。。。

接下来说一下关于料的问题,先上一张图吧。

看这个图,不知道你有没有闪过一些实现的思路。。。

这里对图示内容解释一下吧,看第一列值,可以看出,这是一个排序后的结果,而第二列则是第一列分组求和的数值。这里可能大家就会有疑问了,分组求和后,相同的列不是会何并,然后在对应的行列得到一个求和值吗?这里怎么不是这样的。正因为不是这样,所以这才是真正的料。下面就给大家看看实现的具体sql吧。

WITH item AS(SELECT t.descriptions,CASEWHEN t.qty < 0 THENNULLELSEt.qtyEND qty,rownum seqFROM (SELECT hi.descriptions, -rownum qtyFROM hcm_items hiWHERE hi.items_code = 'test'UNIONSELECT hi.descriptions, SUM(hi.qty) qtyFROM hcm_items hiWHERE hi.items_code = 'test'GROUP BY hi.descriptions) t)
SELECT tab.descriptions, tab.qtyFROM item tabWHERE tab.seq NOT IN (SELECT t.seq - 1 FROM item t WHERE t.qty IS NOT NULL)ORDER BY tab.descriptions, tab.qty;

看了sql,先给科普一下别的一点知识,然后再一点点解释一下这句sql。

  1. UNION: 去除重复记录
  2. UNION  ALL :  保留重复记录
  3. INTERSECT:   取交集
  4. MINUS:  取差集

接下来我就按照这句sql的大体执行顺序来解释一下这句sql吧。我们可以注意到,第一部分执行的sql是由union来合并的两个数据集合,第一个集合很简单,就是将对应数据查出来,需要注意的是,数值列数取的rownum的负值,而第二个数据集合是取的分组求和结果集。接下来第二层就是将非求和值的负值清空,将这样的结果集用with as语句定义为一个子查询部分。最后再将这样的结果去掉汇总行的前一行,然后排序,便能得到这样一个特别的准确的结果。

或许这不是一个最好的办法,但是也是实现这个效果的一个思路,有思路便能类推,解决更多的问题。。。如有道友有更好的思路,还望告知,谢谢

Oracle 分组求和(特殊处理)相关推荐

  1. oracle 分组统计效率,Oracle 分组求和函数(rollup、cube、grouping sets)

    文章目录 1 场景 1.1 概念 1.2 思维导图 1.3 数据准备 2 知识点小结 2.1 group by 2.2 grouping sets:单独分组 2.3 rollup:累计累加 2.4 c ...

  2. mysql学习笔记——分组排序、分组求和

      在 MySQL8.0 版本之前,是没有类似 Oracle.SQLserver.postgresql 等数据库中像 "select 窗口函数 over (partition by 用于分组 ...

  3. oracle绝对值求和,Oracle存储过程当中经常使用函数

    1.字符函数 1.lower(char) upper(char)web lower(char):将字符串转化为小写的格式 问题:将全部员工的名字按小写的方式显示 SQL> select lowe ...

  4. oracle 分组排序 update,oracle分组排序

    oracle 分组排序: 这个麻烦: SELECT * FROM ( SELECT deptno,ename,sal,ROW_NUMBER() OVER (PARTITION BY deptno OR ...

  5. 【转】【CUBE】Oracle分组函数之CUBE魅力

    [转][CUBE]Oracle分组函数之CUBE魅力 http://blog.itpub.net/519536/viewspace-610997/ Oracle的CUBE与ROLLUP功能很相似,也是 ...

  6. oracle分组排序

    oracle 分组排序: 这个麻烦: SELECT * FROM (      SELECT deptno, ename, sal, ROW_NUMBER()    OVER (PARTITION B ...

  7. java steam 排序_java8 stream自定义分组求和并排序的实现

    本文主要介绍了java8 stream自定义分组求和并排序的实现,分享给大家,具体如下: public static void main(String[] args) { List list = ne ...

  8. Oracle分组后对分组内容重复 取第一个

    Oracle分组后对分组内容重复 的以另一列排序后 取第一个 语句 select * from( select a.grep, row_number() over (partition by a.gr ...

  9. c语言分组求和函数,R语言 实现data.frame 分组计数、求和等

    df为1个data.frame对象,有stratum和psu两列,这里统计stratum列计数 方法1: cnt = table(df$stratum) 方法2: cnt = tapply(df$ps ...

  10. linq 分组求和的一般方法

    //var query = from d in expenseApplyModel.ApplyBillList.AsEnumerable() // group d by d.ExpenseItemID ...

最新文章

  1. 《软件工程课程总结》
  2. hdu 1558(线段相交+并查集)
  3. 怎样使用Spring Boot项目的单元测试?
  4. mlflow_在生产中设置MLflow
  5. 多生产者_你是生产者还是消费者?这决定了你的层次。
  6. 深入LINQ | 揭开IQueryable的面纱
  7. 关于python变量的描述_Python变量命名的详细介绍
  8. ajax 更新模型数据_DuangDuangDuang,重点来啦!高薪全靠它——百战Web前端课程更新03.11...
  9. 已知矩阵 matlab,在MATLAB中,已知矩阵A,那么A(:,2:end)表示
  10. Android Studio IDE Out of Memory
  11. TCP服务端开发为例--web开发不同url请求为何会走不同方法
  12. 嗅探对方机器,获取机器键盘记录
  13. ARKit 和 ARCore剖析、结构、原理介绍
  14. 第一章 python基础
  15. golang命令行贪吃蛇
  16. Echarts源码修改
  17. 蒸鱼的七�秘密八�做法 【精美�文】
  18. 所谓键位冲突和无冲突的各种原理
  19. Vue项目的登录和注册界面
  20. 消费升级背景下零食行业发展报告_三只松鼠IPO闯关成功“零食第一股”能否守住食品安全底线...

热门文章

  1. Java性能优化攻略详解
  2. 智慧城市大数据应用案例
  3. 盘点40种常用的芯片封装技术
  4. fastjson将json字符串转化成map的五种方法
  5. Python 爬虫逆向破解案例实战 (二):STEAM密码加密 (RSA) 逆向
  6. MS coco数据集介绍及下载
  7. wps怎么在中文后面加数字_wps带圆圈数字序号⑩后面怎么输入
  8. 朋友圈加粗字体数字_Excel中Ctrl键与26个字母、10个数字及特殊符号的搭配使用快捷键...
  9. 超级搜索术2-人脉搜索/分类整理
  10. STM32连接射频si4438模块