窗口函数
语法:
function_name over( [ partition by [expr1][ ,... ] ] [order by [expr2][ ,... ] [NULLS FIRST | LAST] ] )
功能:以一定的方法在一个与当前行相关的结果子集中进行计算。
function_name 是窗口函数支持的函数名称,目前支持的函数包括LAG、MAX、MIN、ROW_NUMBER、STDDEV、STDDEV_POP、STDDEV_SAMP、SUM。
- partition by表示分组,expr1是分组的列字段名称;order by表示排序,expr2 是排序的列字段名称。
- 若function_name 取值是ROW_NUMBER(),则partition by子句和order by子句不能缺省,其余函数可缺省。
- [NULLS FIRST | LAST]请参见•ORDER BY。
示例:
返回staff表中员工工资的最大值。
--删除staffs表。 DROP TABLE IF EXISTS staffs;
--创建staffs表。 CREATE TABLE staffs ( staff_id NUMBER(6) not null, first_name VARCHAR2(20), last_name VARCHAR2(25), email VARCHAR2(25), phone_number VARCHAR2(20), hire_date DATE, employment_id VARCHAR2(10), salary NUMBER(8,2), commission_pct NUMBER(2,2), manager_id NUMBER(6), section_id NUMBER(4), graduated_name VARCHAR2(60) );
--插入数据。 insert into staffs (staff_id, first_name, last_name, email, phone_number, hire_date, employment_id, salary, commission_pct, manager_id, section_id) values (198, 'Donald', 'OConnell', 'DOCONNEL', '650.507.9833', to_date('21-06-1999', 'dd-mm-yyyy'), 'SH_CLERK', 2200.00, null, 124, 50); insert into staffs (staff_id, first_name, last_name, email, phone_number, hire_date, employment_id, salary, commission_pct, manager_id, section_id) values (198, 'Donald', 'OConnell', 'DOCONNEL', '650.507.9833', to_date('21-06-1999', 'dd-mm-yyyy'), 'SH_CLERK', 2400.00, null, 124, 50); insert into staffs (staff_id, first_name, last_name, email, phone_number, hire_date, employment_id, salary, commission_pct, manager_id, section_id) values (198, 'Donald', 'OConnell', 'DOCONNEL', '650.507.9833', to_date('21-06-1999', 'dd-mm-yyyy'), 'SH_CLERK', 2600.00, null, 124, 50); insert into staffs (staff_id, first_name, last_name, email, phone_number, hire_date, employment_id, salary, commission_pct, manager_id, section_id) values (199, 'Douglas', 'Grant', 'DGRANT', '650.507.9844', to_date('13-01-2000', 'dd-mm-yyyy'), 'SH_CLERK', 4000.00, null, 124, 50);
--返回以staff_ID分组排序后的员工工资的最大值。 select staff_ID, MAX(salary)over(partition by staff_ID order by staff_ID) from staffs; STAFF_ID MAX(SALARY)OVER(PARTITION BY STAFF_ID ORDER BY STAFF_ID) ---------------------------------------- -------------------------------------------------------- 198 2600 198 2600 198 2600 199 4000
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」关注作者【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。评论