- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
first_value
Oracle分析函数:First_Value收藏
?
FIRST_VALUE 功能描述:返回组中数据窗口的第一个值。有些类似于SQL Server中的first(),但用法完全不一样,而功能也强大一些。
?SQL create table EMP(
? id?? number,
? name varchar2(20),
? age? number,
? POS VARCHAR2(20));
SQL? alter table EMP? add constraint emp_PK_id primary key (ID);
?...
SQL SELECT * FROM EMP;
??? ID NAME AGE POS ? 1 A 25 PM ? 2 B 20 PM ? 3 C 30 PL 4 D 35 PL ? 5 E 36 PL 需求:求出每种职位的平均年龄,同时列出每种职位的年龄最大和最小者。
SQL SELECT DISTINCT?????? FIRST_VALUE(NAME) OVER?????? (PARTITION BY POS ORDER BY AGE DESC)?????? AS MAXAGE_NAME?????? ,FIRST_VALUE(NAME) OVER?????? (PARTITION BY POS ORDER BY AGE ASC)?????? AS MINAGE_NAME?????? ,AVG(AGE) OVER?????? (PARTITION BY POS)?????? AS AVG_AGE?????? ,POSFROM EMPORDER BY POS
??? MAXAGE_NAME MINAGE_NAME AVG_AGE POS E C 33PL A B 22.5 PM Published 17 一月 07 09:42 by WantSong
Filed under: 好好学习
Comments
# fatzly said on 一月 10, 2008 21:07:
楼上例子很经典,但补充两点:
1. 使用DISTINCT与不使用DISTINCT,对FIRST_VALUE函数是有区别的,使用DISTINCT的FIRST_VALUE函数效果等类似于SQL Server中的first(),取得所有分组中的第一条数据。
如果不使用DISTINCT,FIRST_VALUE函数的执行结果,按照楼上的例子,按照POS分组,对于每个NAME,都返回本组的第一个值(first_value)
SELECT DISTINCT
? ? ? FIRST_VALUE(NAME) OVER
? ? ? (PARTITION BY POS ORDER BY AGE DESC)
? ? ? AS MAXAGE_NAME
? ? ? ,FIRST_VALUE(NAME) OVER
? ? ? (PARTITION BY POS ORDER BY AGE ASC)
? ? ? AS MINAGE_NAME
? ? ? ,AVG(AGE) OVER
? ? ? (PARTITION BY POS)
? ? ? AS AVG_AGE
? ? ? ,POS
FROM EMP
ORDER BY POS
运行结果
MAXAGE_NAME MINAGE_NAME AVG_AGE POS
1 E C33.6666666666667 PL
2 E C33.6666666666667 PL
3 E C33.6666666666667 PL
4 A B 22.5 PM
5 A B 22.5 PM
2.性能,
通常使用DISTINCT都会造成SQL在运行上性能的损失,但具体损失多少,一般大家没有直观的感受,
根据使用工具Toad(Tools of Oracle Application Developers)的分析结果,相同的SQL使用DISTINCT与使用ROWNUM = 1两种写法, DISTINCT在性能上的损失高达30%以上,证据会在下面给出。
DISTINCT的写法
SELECT DISTINCT
? ? ? FIRST_VALUE(NAME) OVER
? ? ? (PARTITION BY ID ORDER BY AGE DESC)
? ? ? AS MAXAGE_NAME
? ? ? FROM EMP
ORDER BY POS
ROWNUM ?= 1的写法
SELECT MAXAGE_NAME
(SELECT
? ? ? FIRST_VALUE(NAME) OVER
? ? ? (PARTITION BY ID ORDER BY AGE DESC)
? ? ?
您可能关注的文档
- CPA学习笔记—会计20120701054941662CPA学习笔记—会计20120701054941662.doc
- DTSD1352(DTSF1352)三相电子式多功能电能表DTSD1352(DTSF1352)三相电子式多功能电能表.doc
- eihpqhm英语_学习_英语六级作文历年真题作文带翻译_必备eihpqhm英语_学习_英语六级作文历年真题作文带翻译_必备.doc
- eeqrmry英语_六级高分句型必备大全eeqrmry英语_六级高分句型必备大全.doc
- ERP沙盘模拟实验心得ERP沙盘模拟实验心得.doc
- Excel中常用公式Excel中常用公式.doc
- ERP-创业之星实验报告信管100216王少婷ERP-创业之星实验报告信管100216王少婷.doc
- FAQ additional 13 11 20(完成稿)1 overFAQ additional 13 11 20(完成稿)1 over.doc
- FIDIC合同条件讲义FIDIC合同条件讲义.doc
- fpga流水灯课程设计fpga流水灯课程设计.doc
文档评论(0)