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

格式:

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

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

-- 建表
CREATE table tb_sc(
uName varchar2(),
uCourse varchar2(),
Uscore varchar2()
);
-- 插入数据
INSERT INTO tb_sc VALUES('张三','语文','');
INSERT INTO tb_sc VALUES('张三','数学','');
INSERT INTO tb_sc VALUES('李四','语文','');
INSERT INTO tb_sc VALUES('李四','数学','');
INSERT INTO tb_sc VALUES('王五','语文','');
INSERT INTO tb_sc VALUES('王五','数学','');
-- 查询所有
SELECT * FROM tb_sc;
-- 查询每名学生的平均分(展示姓名、平均分)
Select uName,AVG(uScore)
FROM tb_sc
GROUP BY uName;
-- 查询每名同学的平均分并降序排列(展示姓名、平均分)
SELECT uName,AVG(uScore)
FROM tb_sc
GROUP BY uName
ORDER BY uName DESC;
-- 查询平均分数高于85分的学生(展示姓名、平均分)
SELECT uName,AVG(uScore)
FROM tb_sc
GROUP BY uName
HAVING AVG(uScore)>;
-- 查询不为张三且平均分高于85的学生(展示姓名、平均分)
SELECT uName,AVG(uScore)
FROM tb_sc
GROUP BY uName
HAVING uName != '张三' AND AVG(uScore) >;
-- 查询所有学生的信息并将每个学生的各科成绩降序
SELECT t.*,ROW_NUMBER() OVER(PARTITION BY t.uName ORDER BY t.uScore DESC) RM
FROM tb_sc t;
-- 查询每个学生考得最好的科目并展示该科目的成绩
SELECT *
FROM(
SELECT t.*,row_number() OVER(PARTITION BY t.uName ORDER BY t.uScore DESC) rm
FROM tb_sc t )
WHERE rm=; -- 注:row_number() over(oartition by 分组字段 order by 排序字段)常用于查询所有分组并将各个窗体进行排序 -- 在开窗函数出现之前存在着很多用SQL语句很难解决的问题,很多都要通过复杂的相关子查询或者存储过程来完成。为了解决这些问题,在2003年ISO、SQL标准加入了开窗看书,
-- 开窗看书的使用使得这些经典的难题可以被轻松的解决。目前在MSSQLSERVER、Oracle、DB2等主流数据库中都提供了对开窗函数的支持,遗憾的是MYSQL暂未支持 -- 建表
CREATE TABLE T_Person(
FName VARCHAR2(),
FCity VARCHAR2(),
FAge INT,
FSalary INT
); -- 插入原始数据
INSERT INTO T_Person(FName,FCity,FAge,FSalary)
VALUES('Tom','BeiJing',,);
INSERT INTO T_Person(FName,FCity,FAge,FSalary)
VALUES('Tim','ChengDu',,);
INSERT INTO T_Person(FName,FCity,FAge,FSalary)
VALUES('Jim','BeiJing',,);
INSERT INTO T_Person(FName,FCity,FAge,FSalary)
VALUES('Lily','London',,);
INSERT INTO T_Person(FName,FCity,FAge,FSalary)
VALUES('John','NewYork',,);
INSERT INTO T_Person(FName,FCity,FAge,FSalary)
VALUES('YaoMing','BeiJing',,);
INSERT INTO T_Person(FName,FCity,FAge,FSalary)
VALUES('Swing','London',,);
INSERT INTO T_Person(FName,FCity,FAge,FSalary)
VALUES('Guo','NewYork',,);
INSERT INTO T_Person(FName,FCity,FAge,FSalary)
VALUES('YuQian','BeiJing',,);
INSERT INTO T_Person(FName,FCity,FAge,FSalary)
VALUES('Ketty','London',,);
INSERT INTO T_Person(FName,FCity,FAge,FSalary)
VALUES('Kitty','ChengDu',,);
INSERT INTO T_Person(FName,FCity,FAge,FSalary)
VALUES('Merry','BeiJing',,);
INSERT INTO T_Person(FName,FCity,FAge,FSalary)
VALUES('Smith','ChengDu',,);
INSERT INTO T_Person(FName,FCity,FAge,FSalary)
VALUES('Bill','BeiJing',,);
INSERT INTO T_Person(FName,FCity,FAge,FSalary)
VALUES('Jerry','NewYork',,);
-- 查看表中的内容
SELECT *
FROM T_Person; -- 开窗函数简介
-- 与聚合函数一样,开窗函数也是对行集组进行稽核计算,但是它不像普通聚合函数那样,每组只返回一个值,开窗函数可以每组返回多个值,
-- 因为在开窗函数所执行聚合计算的行集组是窗口。在ISO、SQL规定了这样的函数为开窗函数,在Oracle中则被称为分析函数,在DB2中则被称
-- 为OLAP函数 --计算人员的总数
SELECT COUNT(*) FROM T_Person;
-- 查询每个工资小于5000员的员工信息(城市以及年龄),并且在每行中都显示所有工资小于5000元的员工的个数
SELECT FCity,FAge,COUNT(*)
FROM T_Person
WHERE FSalary <
GROUP BY FCity,FAge;
-- 上面得到的count的值有问题,因为count统计的是分组中的总数,而分组的条件其实被改变了
SELECT FCity,FAge,(SELECT COUNT(*) FROM T_Person WHERE FSalary <)
FROM T_Person
WHERE FSalary <;
-- 上面可以解决问题,有点恶心就是,我们使用开窗函数
SELECT FCity,FAge,COUNT(*) OVER()
FROM T_Person
WHERE FSalary <;
-- 可以看到与聚合函数不同的是,开窗函数在聚合函数后增加了一个OEVR关键字。
-- 开窗函数的调用格式为: 聚合函数(...) OVER(选项)
-- OVER关键字把函数当成开窗函数而不是聚合函数。SQL标准允许将所有聚合函数用做开窗函数,使用OVER关键字来区分这两种用法
-- OVER中的选项使用PARTITION BY 替代GROUP BY,也可以含有ORDER BY子句.也就是说开窗函数中是分组的条件和依据,不过GROUP BY 使用PARTITION BY替代。
SELECT FCity,FAge,COUNT(*) OVER(PARTITION BY FCity)
FROM T_Person
WHERE FSalary <;
-- 上面我最后输出的就是城市的数量了。

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. ThinkPHP3.2.3使用cli命令行模式

    使用tp3.2.3的cli模式时,报错.加上绝对路径还是报错.所以采用普通模式 if(version_compare(PHP_VERSION,'5.3.0','<')) die('require ...

  2. jQuery滚动数字

    <ul class="dateList"> <li class="one"> <p class="titleName&q ...

  3. 批量转换编码 (gbk -> utf8)

    使用 Notepad++ 批量的转换文件编码:Mass convert a project to UTF-8 using Notepad++ 步骤如下: 1.一般 Noptepad++ 安装完后已经自 ...

  4. C++内存管理的缩影

    都说C++内存管理是个大坑.实际上也确实是这样. C++有析构函数,每当一个对象过期的时候,C++会执行两个动作 1.执行析构函数. 2.将对象和对象的所有数据删除. 很多人就会问了,既然有把对象删除 ...

  5. ASP.NET MVC简介

    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码 ...

  6. jquery中隐藏div的几种方法

    //jQuery中的显示.隐藏方法 $("#id").show()://表示display:block,    $("#id").hide()://表示disp ...

  7. JAVA线程安全总结(转载)

    JAVA线程安全总结(一) JAVA线程安全总结(二) 最近想将java基础的一些东西都整理整理,写下来,这是对知识的总结,也是一种乐趣.已经拟好了提纲,大概分为这几个主题: java线程安全,jav ...

  8. sql sever读取Excel总结【转】

    主要用到openrowset,opendatasource系统函数,这两个函数任意一个都能完成任务 用这种方法可以实现Excel和sqlserver表之间的相互导入导出. openrowset的写法 ...

  9. Shell中的空格和引号

    空格对于linux的shell是一种很典型的分隔符,所以给变量赋值的时候中间不能够有空格.而单引号和双引号,都是为了解决中间有空格的问题.比如string1=this is a string,这样执行 ...

  10. Ionic 的 ng-class 在聊天功能上面的巧妙运用

    很多人在问我是ionic好呢?还是react好呢? 其实我只想告诉你去看文档啊,不用用怎么知道哪个合适呢? 嘿嘿但是真的这么问的时候我也不会这么回答的,那岂不是太张狂了哈哈哈 react我确实没有用过 ...