copy文链接:http://blog.csdn.net/yjjm1990/article/details/7524167#,http://www.2cto.com/database/201402/281473.html

格式:

  可以开窗的函数(..) over(..)

  over中防止分组的条件和分组的排序,不过分组使用的不再是GROUP BY而是PARTITION BY,表示开窗

  1. -- 建表
  2. CREATE table tb_sc(
  3. uName varchar2(),
  4. uCourse varchar2(),
  5. Uscore varchar2()
  6. );
  7. -- 插入数据
  8. INSERT INTO tb_sc VALUES('张三','语文','');
  9. INSERT INTO tb_sc VALUES('张三','数学','');
  10. INSERT INTO tb_sc VALUES('李四','语文','');
  11. INSERT INTO tb_sc VALUES('李四','数学','');
  12. INSERT INTO tb_sc VALUES('王五','语文','');
  13. INSERT INTO tb_sc VALUES('王五','数学','');
  14. -- 查询所有
  15. SELECT * FROM tb_sc;
  16. -- 查询每名学生的平均分(展示姓名、平均分)
  17. Select uName,AVG(uScore)
  18. FROM tb_sc
  19. GROUP BY uName;
  20. -- 查询每名同学的平均分并降序排列(展示姓名、平均分)
  21. SELECT uName,AVG(uScore)
  22. FROM tb_sc
  23. GROUP BY uName
  24. ORDER BY uName DESC;
  25. -- 查询平均分数高于85分的学生(展示姓名、平均分)
  26. SELECT uName,AVG(uScore)
  27. FROM tb_sc
  28. GROUP BY uName
  29. HAVING AVG(uScore)>;
  30. -- 查询不为张三且平均分高于85的学生(展示姓名、平均分)
  31. SELECT uName,AVG(uScore)
  32. FROM tb_sc
  33. GROUP BY uName
  34. HAVING uName != '张三' AND AVG(uScore) >;
  35. -- 查询所有学生的信息并将每个学生的各科成绩降序
  36. SELECT t.*,ROW_NUMBER() OVER(PARTITION BY t.uName ORDER BY t.uScore DESC) RM
  37. FROM tb_sc t;
  38. -- 查询每个学生考得最好的科目并展示该科目的成绩
  39. SELECT *
  40. FROM(
  41. SELECT t.*,row_number() OVER(PARTITION BY t.uName ORDER BY t.uScore DESC) rm
  42. FROM tb_sc t )
  43. WHERE rm=;
  44.  
  45. -- 注:row_number() over(oartition by 分组字段 order by 排序字段)常用于查询所有分组并将各个窗体进行排序
  46.  
  47. -- 在开窗函数出现之前存在着很多用SQL语句很难解决的问题,很多都要通过复杂的相关子查询或者存储过程来完成。为了解决这些问题,在2003ISOSQL标准加入了开窗看书,
  48. -- 开窗看书的使用使得这些经典的难题可以被轻松的解决。目前在MSSQLSERVEROracleDB2等主流数据库中都提供了对开窗函数的支持,遗憾的是MYSQL暂未支持
  49.  
  50. -- 建表
  51. CREATE TABLE T_Person(
  52. FName VARCHAR2(),
  53. FCity VARCHAR2(),
  54. FAge INT,
  55. FSalary INT
  56. );
  57.  
  58. -- 插入原始数据
  59. INSERT INTO T_Person(FName,FCity,FAge,FSalary)
  60. VALUES('Tom','BeiJing',,);
  61. INSERT INTO T_Person(FName,FCity,FAge,FSalary)
  62. VALUES('Tim','ChengDu',,);
  63. INSERT INTO T_Person(FName,FCity,FAge,FSalary)
  64. VALUES('Jim','BeiJing',,);
  65. INSERT INTO T_Person(FName,FCity,FAge,FSalary)
  66. VALUES('Lily','London',,);
  67. INSERT INTO T_Person(FName,FCity,FAge,FSalary)
  68. VALUES('John','NewYork',,);
  69. INSERT INTO T_Person(FName,FCity,FAge,FSalary)
  70. VALUES('YaoMing','BeiJing',,);
  71. INSERT INTO T_Person(FName,FCity,FAge,FSalary)
  72. VALUES('Swing','London',,);
  73. INSERT INTO T_Person(FName,FCity,FAge,FSalary)
  74. VALUES('Guo','NewYork',,);
  75. INSERT INTO T_Person(FName,FCity,FAge,FSalary)
  76. VALUES('YuQian','BeiJing',,);
  77. INSERT INTO T_Person(FName,FCity,FAge,FSalary)
  78. VALUES('Ketty','London',,);
  79. INSERT INTO T_Person(FName,FCity,FAge,FSalary)
  80. VALUES('Kitty','ChengDu',,);
  81. INSERT INTO T_Person(FName,FCity,FAge,FSalary)
  82. VALUES('Merry','BeiJing',,);
  83. INSERT INTO T_Person(FName,FCity,FAge,FSalary)
  84. VALUES('Smith','ChengDu',,);
  85. INSERT INTO T_Person(FName,FCity,FAge,FSalary)
  86. VALUES('Bill','BeiJing',,);
  87. INSERT INTO T_Person(FName,FCity,FAge,FSalary)
  88. VALUES('Jerry','NewYork',,);
  89. -- 查看表中的内容
  90. SELECT *
  91. FROM T_Person;
  92.  
  93. -- 开窗函数简介
  94. -- 与聚合函数一样,开窗函数也是对行集组进行稽核计算,但是它不像普通聚合函数那样,每组只返回一个值,开窗函数可以每组返回多个值,
  95. -- 因为在开窗函数所执行聚合计算的行集组是窗口。在ISOSQL规定了这样的函数为开窗函数,在Oracle中则被称为分析函数,在DB2中则被称
  96. -- OLAP函数
  97.  
  98. --计算人员的总数
  99. SELECT COUNT(*) FROM T_Person;
  100. -- 查询每个工资小于5000员的员工信息(城市以及年龄),并且在每行中都显示所有工资小于5000元的员工的个数
  101. SELECT FCity,FAge,COUNT(*)
  102. FROM T_Person
  103. WHERE FSalary <
  104. GROUP BY FCity,FAge;
  105. -- 上面得到的count的值有问题,因为count统计的是分组中的总数,而分组的条件其实被改变了
  106. SELECT FCity,FAge,(SELECT COUNT(*) FROM T_Person WHERE FSalary <)
  107. FROM T_Person
  108. WHERE FSalary <;
  109. -- 上面可以解决问题,有点恶心就是,我们使用开窗函数
  110. SELECT FCity,FAge,COUNT(*) OVER()
  111. FROM T_Person
  112. WHERE FSalary <;
  113. -- 可以看到与聚合函数不同的是,开窗函数在聚合函数后增加了一个OEVR关键字。
  114. -- 开窗函数的调用格式为: 聚合函数(...) OVER(选项)
  115. -- OVER关键字把函数当成开窗函数而不是聚合函数。SQL标准允许将所有聚合函数用做开窗函数,使用OVER关键字来区分这两种用法
  116. -- OVER中的选项使用PARTITION BY 替代GROUP BY,也可以含有ORDER BY子句.也就是说开窗函数中是分组的条件和依据,不过GROUP BY 使用PARTITION BY替代。
  117. SELECT FCity,FAge,COUNT(*) OVER(PARTITION BY FCity)
  118. FROM T_Person
  119. WHERE FSalary <;
  120. -- 上面我最后输出的就是城市的数量了。

Oracle开窗函数 over()(转)的更多相关文章

  1. Oracle开窗函数笔记及应用场景

    介绍Oracle的开窗函数之前先介绍一下分析函数,因为开窗函数也属于分析函数 分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行. 上面是 ...

  2. Oracle 开窗函数--转

    oracle的分析函数over 及开窗函数 转自:http://zonghl8006.blog.163.com/blog/static/4528311520083995931317/一:分析函数ove ...

  3. oracle的分析函数over 及开窗函数

    转:http://www.2cto.com/database/201310/249722.html oracle的分析函数over 及开窗函数   一:分析函数over   Oracle从8.1.6开 ...

  4. oracle分析函数技术详解(配上开窗函数over())

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  5. oracle 分析函数和开窗函数

    最近遇到一个需求,将查询出的数据按照地区分组,随机取出每个区域的2条数据,这里用到了oracle的分析和开窗函数: 最终写出的sql如下: select * from (select region,r ...

  6. 超级牛皮的oracle的分析函数over(Partition by...) 及开窗函数 (转)

    http://zonghl8006.blog.163.com/blog/static/4528311520083995931317/ over(Partition by...) 一个超级牛皮的ORAC ...

  7. 超级牛皮的oracle的分析函数over(Partition by...) 及开窗函数

    over(Partition by...) 一个超级牛皮的ORACLE特有函数. 天天都用ORACLE,用了快2年了.最近才接触到这个功能强大而灵活的函数.真实惭愧啊! oracle的分析函数over ...

  8. [转]Oracle 语法之 OVER (PARTITION BY ..) 及开窗函数

    oracle的分析函数over 及开窗函数 一:分析函数Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是 对于每个组返回多行,而聚合函数对于每个组 ...

  9. oracle的分析函数over(Partition by...) 及开窗函数

        over(Partition by...) 一个超级牛皮的ORACLE特有函数. oracle的分析函数over 及开窗函数一:分析函数overOracle从8.1.6开始提供分析函数,分析函 ...

随机推荐

  1. spring+redis

    配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www ...

  2. js和jquery获取当前对象的子元素

    开发中经常遇到需要获取ul下的il对象,个人总结了js和jquery的方法. HTML片断: <ul class="box"> <li>子元素1</l ...

  3. Python操作redis

    安装好吧,我承认我只会最简单的安装 sudo apt-get install Redis-server Python 支持包: (其实就一个文件,搞过来就能用) sudo apt-get instal ...

  4. servlet学习笔记_4

    一.response.1.response.characterEncoding和response.setContentType("text/html;charset=UTF-8") ...

  5. web前端学习(二) javascript对象和原型继承

    目录 1. JavaScrpt对象 2. 原型对象和继承 3. 对象的克隆 (1)javascript对象 在JS中,对象是属性的容器.对于单个对象来说,都由属性名和属性值构成:其中属性名需要是标识符 ...

  6. Java界面

    JFrame.java package myProject; import java.awt.Color;import java.awt.EventQueue; import javax.swing. ...

  7. hive修改 表/分区语句

    参考 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterTable% ...

  8. console

    你所不知道的 Console 2016-12-19 ZHANGXIANGLIANG JavaScript 转自 https://segmentfault.com/a/119000000672160 1 ...

  9. AX2012单元格显示颜色 displayOption

    public void displayOption(HV_WMSLocationStatusHistory _record, FormRowDisplayOption _options){    #d ...

  10. python unicode转中文及转换默认编码

    一. 在爬虫抓取网页信息时常需要将类似"\u4eba\u751f\u82e6\u77ed\uff0cpy\u662f\u5cb8"转换为中文,实际上这是unicode的中文编码.可 ...