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
,POS
FROM EMP
ORDER BY POS
MAXAGE_NAME MINAGE_NAME AVG_AGE POS
E C 33.66666667 PL
A B 22.5 PM
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
,POS
FROM EMP
ORDER BY POS
MAXAGE_NAME MINAGE_NAME AVG_AGE POS
E C 33.66666667 PL
A B 22.5 PM
本文详细介绍了如何使用SQL的窗口函数实现复杂的数据聚合,包括计算每种职位的平均年龄、最大年龄和最小年龄。通过PARTITION BY 和 ORDER BY 的结合,展示了窗口函数的强大功能及其在实际业务场景中的应用。
1808

被折叠的 条评论
为什么被折叠?



