【Oracle】Over函数的用法
一、问题
如果一张表中有n个数据,分别属于a个小组,现在我们要求每个组里某个【字段】的最大值,最小值,和,差等聚合函数,该怎么操作?
举个具体点的例子,有一个表名为demo的oracle数据库表,有字段如ID【id】,名字【name】,年龄【age】,国家【country】4个字段,我们要求不同的国家,最大年纪的人的信息;
demo表的建表语句如下:
create table DEMO(
id varchar2(10) primary key not null,
name varchar2(10),
age varchar2(10),
country varchar2(10)
)
insert into demo(‘1’,‘刘备’,‘45’,‘蜀’);
insert into demo(‘2’,‘关羽’,‘42’,‘蜀’);
insert into demo(‘3’,‘张飞’,‘40’,‘蜀’);
insert into demo(‘4’,‘曹操’,‘47’,‘魏’);
insert into demo(‘5’,‘孙权’,‘21’,‘吴’);
insert into demo(‘6’,‘周瑜’,‘24’,‘吴’);
二、解决方法
我们先将所有记录按国家分组,倒序排序并标注序号值:
1.首先根据country分组,然后每组按照age字段倒叙排列,然后Rank()函数会将所有满足条件的记录排序;
select d.* ,Rank()Over(partition by d.country order by d.age desc) mm from demo d;
这样执行的结果就是这样:
这里的mm就是我们rank()函数排序后的序号;接下来,我们把mm等于1的值拿出来,就是各个国家年纪最大的值得记录:
select * from (
select d.*,rank()over(partition by d.country order by d.age desc) mm
from demo d
)
where mm=1;
这样,就能获得年纪最大的记录的信息:
三、分析
如果我们用max+group by并且不适用over()函数来操作,那么可以实现么?
本文举的例子是可以实现的,但是如果遇到其他情况,可能会更复杂;用over()函数会更好一些;
【Oracle】Over函数的用法相关推荐
- Oracle trunc()函数的用法
--Oracle trunc()函数的用法 /**************日期********************/ 1.select trunc(sysdate) from dual --20 ...
- oracle 获得月最后一天,oracle获取本月第一天和最后一天及Oracle trunc()函数的用法...
select to_char(trunc(add_months(last_day(sysdate), -1) + 1), 'yyyy-mm-dd') "本月第一天", to_cha ...
- oracle查询本月第一天_oracle获取本月第一天和最后一天及Oracle trunc()函数的用法...
select to_char(trunc(add_months(last_day(sysdate), -1) + 1), 'yyyy-mm-dd') "本月第一天", to_ch ...
- Oracle to_date()函数的用法
在Oracle数据库中,Oracle to_date()函数是我们经常使用的函数,下面就为您详细介绍Oracle to_date()函数的用法 to_date()与24小时制表示法及mm分钟的显示: ...
- Oracle to_char()函数的用法
Comments - 446 Oracle to_char()函数的用法 The following are number examples for the to_char function. to_ ...
- oracle trunc q,Oracle trunc()函数的用法
/**************日期 TRUNC()函数没有秒的精确********************/ select sysdate from dual --当时日期 select trunc ...
- 四舍五入oracle,Oracle trunc()函数的用法及四舍五入 round函数
--Oracle trunc()函数的用法 /**************日期********************/ 1.select trunc(sysdate) from dual --201 ...
- oracle decode函数什么意思,oracle decode函数的用法
oracle decode函数,不管查询的结果是否满足'PRIMARY',参数中的select语句还是会执行的,通过查看执行计划就知道 set autotrace traceonly select d ...
- Oracle NVL函数的用法
今天研究了一下数据库中的过程,发现用到NVL这个函数,我记忆力不好,之前用过,长期不用又忘了.于是去查看了下官方的用法解释: http://docs.oracle.com/cd/E11882_01/s ...
- Oracle translate 函数的用法, 以及和replace的区别
translate 是用来替换字符的函数 语法: translate(char, from_str,to_str) 其中,char是待处理的字符串. from_str是按顺序排列若干个要被替换的 ...
最新文章
- 某网友发表如此言论:程序员基本都是diao丝,是农村进城务工人员!有资源有关系的都不干程序员!...
- 以太坊 智能合约 简介
- java窗体设置最小宽度_flex web Application设置最小高度和宽度。
- char与byte的区别
- MIPI参数配置解释
- run在java_Java语言start和run方法的区别
- mac中apache服务器及虚拟主机配置
- python绘制散点图的函数_python matplotlib更新函数的散点图
- html清除图片缓存
- jeecg-framework-3.3.2-RELEASE 最新版本发布
- 数据结构与算法——二叉树与图汇总整理
- chrome扩展推荐:此刻、今天、最近~一个关于时间管理的扩展 - Momentum
- 【干货】前端开发者最常用的六款IDE
- [渝粤教育] 西南科技大学 中国古代文学〔2〕 在线考试复习资料
- oracle 产品宣传片,史上最牛宣传片!河南的美已惊艳了世界!
- 将指定小程序页面设置为首页的两种方式
- “决策树”——数据挖掘、数据分析
- 基于K8S的容器化PaaS平台建设
- 介绍一个开源博客项目并部署到Nginx服务器
- html虚线垂直居中,css-虚线边框滚动效果