ORACLE分析函数[1]
-----------------------------------------------------------
-
| Id | Operation
| Name
| Rows |
-----------------------------------------------------------
--
-----------------------------------------------------------
-
| Id | Operation
| Name
| Rows |
-----------------------------------------------------------
SELECT owner,object_type FROM ( SELECT owner,object_type,
dense_rank() over(ORDER BY trunc(created,'dd') DESC) rn FROM demo2 WHERE owner='DINGJUN123' ) WHERE rn=1
10
2450
7839
5000
10
7450
7934
1300
10
8750
。。。
ORACLE分析函数[1]
分析函数缺点
----------------------------------------------------
-----
| SELECT STATEMENT
|
|
1 | 65 |
|
| HASH JOIN
-
10
7782
2450
8750
32025
10
7934
1300
8750
32025
10
7839
5000
8750
32025
20
7902
3000
10875
32025
20
7566
2975
10875
32025
20
7876
1100
10875
32025
20
7369
800
10875
32025
20
7788
3000
10875
-
| 0 | SELECT STATEMENT
|
| 202 |
|* 1 | TABLE ACCESS BY INDEX ROWID | DEMO2
| 202 |
|* 2 | INDEX RANGE SCAN
| IDX_DEMO2 | 20237 |
| 3 | SORT AGGREGATE
|
|
1|
| 4 | TABLE ACCESS BY INDEX ROWID| DEMO2
-----
| 0 | SELECT STATEMENT
|
|
213 |
| 1 | TABLE ACCESS BY INDEX ROWID| DEMO2
|
213 |
|* 2 | INDEX RANGE SCAN
| IDX_DEMO2 |
1|
| 3 | SORT AGGREGATE
|
|
1| |2*1--|-3-I3-d44--||-|--O-p-e-r-aI-tN-iD-oE-nX--R--A-N-G-E--S-C-A--N---------|-|-N-aI-mD-eX-_-D-E--M-O-|2--R|-o-w-s---|----------------------------------------------------------------------------------------------------------------
--Elapsed: 00:00:04.38
ID很多重复, inline view分组 减少连接数量
需要排序的分析函数,会消耗一定的资源,当然大多可以优化,对复杂的行间计算、累计值、移动平均等还是首选分析函数
学习改变命运,知 识创造未来
ORACLE分析函数[1]
分析函数语法-图1
学习改变命运,知 识创造未来
ORACLE分析函数[1]
分析函数语法-图2
学习改变命运,知 识创造未来
ORACLE分析函数[1]
分析函数语法之关系
文档注意点 和限制
PARTITION BY ORDER BY
Analytic Function
学习改变命运,知 识创造未来
ROWS Vs RANGE
UNBOUNDED PRECEDING FOLLOWING CURRENT ROW
5 - access("OWNER"='DINGJUN123')
建立owner,trunc(created,’dd’) desc复合索引
构建合适索引,消除 排序,是一种重要的
进一步优化
作用对于原始SQL子查询可以快速扫描,分析函数消除排序
SQL优化手段
学习改变命运,知 识创造未来
优化后原始SQL逻辑读/COST:111/171,分析OR函A数C:L6E/7分67析函数[1]
32025
ORACLE分析函数[1]
分析函数语法之order by
1 order by当前行默认窗口是当前行所属的partition第1行到当前行(根据order by顺 序指定),无order by就是对应所属partition所有行。
2 order by默认是range窗口,对应逻辑窗口,保证分析函数值的唯一性,但是对排
20
7788
3000
10875
10875
20
7902
3000
10875
10875
30
7900
950
950
950
30
7654
1250
ORACLE分析函数[1]
分析函数语法之partition by
1 通过partition by子句,将相同的行聚合到一起成为一组,之后当前行的分析函数计算 就是在这行对应的partition里。每个分析函数1都可以使用partition by子句。
2 每行在对应的窗口内,应用分析函数,然后计算得到当前行对应的分析函数值。
-
| 0 | SELECT STATEMENT
|
| 21334
|
|* 1 | VIEW
|
| 21334
Hale Waihona Puke ||* 2 | WINDOW NOSORT STOPKEY
|
| 21334
|
| 3 | TABLE ACCESS BY INDEX ROWID| DEMO2
| 21334
|
|* 4 |
INDEX RANGE SCAN
| 20237 |
|* 5 |
INDEX RANGE SCAN
| IDX_DEMO2 | 20237 |
Predicate Information (identified by operation id):
-----------------------------------------------------------
trunc(created,'dd') = (SELECT MAX(trunc(created,'dd'))
FROM demo2 WHERE owner='DINGJUN123')
乙:相关列有索引吗? 甲:owner有索引,选择性不错,我想用分析函数改写看看? 乙:哦,知道了,这是典型的top-n查询。
ORACLE分析函数[1]
学习改变命运,知 识创造未来
2021年2月17日星期三
主要内容
学习改变命运,知 识创造未来
ORACLE分析函数[1]
分析函数作用
甲:我有个SQL,你能帮我用分析函数改写下吗?
SELECT owner,object_type FROM demo2 WHERE owner='DINGJUN123' AND
| IDX_DEMO2 | 21334
|
----------------------------------------------------------
-
EMPNO
SAL
DEPTNO SUM_CURRENT
------ ---------- ---------- -----------
7782
2450
---------------------------------------------------
(SELECT
1 - filter("RN"=1)
MAX(TRUNC(INTERNAL_FUNCTION("CREATED"),'fmdd')) FROM "DEMO2" "DEMO2" WHERE
| SELECT STATEMENT
|
| 990K| 49M|
|
| VIEW
|
| 990K| 49M|
|
| WINDOW SORT PUSHED RANK|
| 990K| 36M|
49M|
| TABLE ACCESS FULL
| T1 | 990K| 36M|
|
-----------------------------------------------------------
ORACLE_分析函数大全
ORACLE_分析函数大全Oracle分析函数是一种高级SQL函数,它可以在查询中实现一系列复杂的分析操作。
这些函数可以帮助我们在数据库中执行各种数据分析和报表生成任务。
本文将介绍Oracle数据库中的一些常用分析函数。
1.ROW_NUMBER函数:该函数为查询结果中的每一行分配一个唯一的数字。
可以用它对结果进行排序或分组。
例如,可以使用ROW_NUMBER函数在结果集中为每个员工计算唯一的编号。
2.RANK和DENSE_RANK函数:这两个函数用于计算结果集中每个行的排名。
RANK函数返回相同值的行具有相同的排名,并且下一个排名值将被跳过。
DENSE_RANK函数类似,但是下一个排名值不会被跳过。
G和LEAD函数:LAG函数返回结果集中指定列的前一个(上一个)行的值,而LEAD函数返回后一个(下一个)行的值。
这些函数通常用于计算增长率或发现趋势。
4.FIRST和LAST函数:这两个函数用于返回结果集中分组的第一个和最后一个行的值。
可以与GROUPBY子句一起使用。
5.CUME_DIST函数:该函数用于计算给定值的累积分布。
它返回值的累积分布在结果集中的位置(百分比)。
6.PERCENT_RANK函数:该函数用于计算结果集中每个行的百分位数排名。
它返回值的百分位数排名(0到1之间的小数)。
7. NTILE函数:该函数用于将结果集分成指定数量的桶(Bucket),并为每个行分配一个桶号。
通常用于将数据分组为更小的块。
8.LISTAGG函数:该函数将指定列的值连接成一个字符串,并使用指定的分隔符分隔每个值。
可以用它将多个值合并在一起形成一个字符串。
9.AVG、SUM、COUNT和MAX/MIN函数:这些是常见的聚合函数,可以在分析函数中使用。
它们用于计算结果集中的平均值、总和、计数和最大/最小值。
以上只是Oracle数据库中的一些常用分析函数。
还有其他一些分析函数,如PERCENTILE_CONT、PERCENTILE_DISC等可以用于更高级的分析计算。
Oracle分析函数
Collion 19 -- 经理Collion总销售额
Collion GZ 18
Collion SH 1
Collion 19
JT SH 9
Kevin 19 -- 经理Kevin总销售额
/
insert into test_sales values('SH',7,9,'Kevin',sysdate);
/
insert into test_sales values('SH',5,1,'JT',sysdate);
/
insert into test_sales values('GZ',6,9,'JT',sysdate);
GZ 45 -- GZ 地区销售额
SH 29 -- SH 地区销售额
JT SH 9
JT 18
Kevin SH 19
/
insert into test_sales values('GZ',7,9,'Collion',sysdate);
/
1.查询总销售额,地区销售额和各经理销售情况
solution 1 -- cube()
select manager,location_name,sum(sales) from test_sales
74
2. 查询各经理销售情况 即指定分组
solution 1-- grouping sets()
select manager,location_name,sum(sales) from test_sales
ORACLE分析函数[1]
Predicate Information (identified by operation id):
-----------------------------------------------------------
--
-----------------------------------------------------------
| 202 |
|* 2 | INDEX RANGE SCAN
| IDX_DEMO2 | 20237 |
| 3 | SORT AGGREGATE
|
|
1|
| 4 | TABLE ACCESS BY INDEX ROWID| DEMO2
| 20237 |
|* 5 |
INDEX RANGE SCAN
| IDX_DEMO2 | 20237 |
FROM demo2
| 0 | SELECT STATEMENT
|
|
WHERE owner='DINGJUN123' AND trunc(created,'dd') =
213 |
| 1 | TABLE ACCESS BY INDEX ROWID| DEMO2
|
213 |
(SELECT MAX(trunc(created,'dd')) FROM demo2
-
| Id | Operation
| Name
| Rows |
-----------------------------------------------------------
-
| 0 | SELECT STATEMENT
oracle之分析函数
Oracle 分析函数的使用Oracle 分析函数使用介绍分析函数是oracle816引入的一个全新的概念,为我们分析数据提供了一种简单高效的处理方式.在分析函数出现以前,我们必须使用自联查询,子查询或者内联视图,甚至复杂的存储过程实现的语句,现在只要一条简单的sql语句就可以实现了,而且在执行效率方面也有相当大的提高.下面我将针对分析函数做一些具体的说明.今天我主要给大家介绍一下以下几个函数的使用方法1. 自动汇总函数rollup,cube,2. rank 函数, rank,dense_rank,row_number3. lag,lead函数4. sum,avg,的移动增加,移动平均数5. ratio_to_report报表处理函数6. first,last取基数的分析函数基础数据1. 使用rollup函数的介绍select area_code,sum(local_fare) local_farefrom ttgroup by area_codeunion allselect'合计' area_code,sum(local_fare) local_fare from tt;1 0 UNION-ALL2 1 SORT (GROUP BY) (Cost=5 Card=1309 Bytes=24871)3 2 TABLE ACCESS (FULL) OF 'T' (Cost=2 Card=1309 Bytes=24871)4 1 SORT (AGGREGATE)5 4 TABLE ACCESS (FULL) OF 'T' (Cost=2 Card=1309 Bytes=17017)Statistics----------------------------------------------------------0 recursive calls0 db block gets6 consistent gets0 physical reads0 redo size561 bytes sent via SQL*Net to client503 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client1 sorts (memory)0 sorts (disk)6 rows processed下面是使用分析函数rollup得出的汇总数据的例子SQL> select nvl(area_code,'合计') area_code,sum(local_fare) local_fare2 from tt3 group by rollup(area_code);4 /AREA_CODE LOCAL_FARE---------- --------------5761 54225413.045762 52039619.605763 69186545.025764 53156768.465765 104548719.19合计333157065.31从上面的结果中我们很容易发现,每个统计数据所对应的行都会出现null,我们如何来区分到底是根据那个字段做的汇总呢,这时候,oracle的grouping函数就粉墨登场了.如果当前的汇总记录是利用该字段得出的,grouping函数就会返回1,否则返回01 select decode(grouping(area_code),1,'all area',to_char(area_code))area_code,2 decode(grouping(bill_month),1,'all month',bill_month) bill_month,3 sum(local_fare) local_fare4 from t5 group by cube(area_code,bill_month)6* order by area_code,bill_month nulls last07:07:29 SQL> /AREA_CODE BILL_MONTH LOCAL_FARE---------- --------------- --------------5761 200405 13060.435761 200406 13318.935761 200407 13710.275761 200408 14135.785761 all month 54225.415762 200405 12643.795762 200406 12795.065762 200407 13224.305762 200408 13376.475762 all month 52039.625763 200405 16649.785763 200406 17120.525763 200407 17487.495763 200408 17928.765763 all month 69186.545764 200405 12487.795764 200406 13295.195764 200407 13444.095764 200408 13929.695764 all month 53156.775765 200405 25057.745765 200406 26058.465765 200407 26301.885765 200408 27130.645765 all month 104548.72all area 200405 79899.532. rank函数的介绍问题2.我想查出这几个月份中各个地区的总话费的排名.为了将rank,dense_rank,row_number函数的差别显示出来,我们对已有的基础数据做一些修改,将5763的数据改成与5761的数据相同.1 update t t1 set local_fare = (2 select local_fare from t t23 where t1.bill_month = t2.bill_month4 and _type = _type5 and t2.area_code = '5761'6) where area_code = '5763'SQL> /update tt t1 set local_fare =(select local_fare from tt t2where t1.bill_month = t2.bill_monthand _type = _typeand t2.area_code ='5761')where area_code ='5763';8 rows updated.Elapsed: 00:00:00.01我们先使用rank函数来计算各个地区的话费排名.SQL> select area_code,sum(local_fare) local_fare,2 rank() over (order by sum(local_fare) desc) fare_rank3 from t4 group by area_codeselect area_code,sum(local_fare) local_fare,rank() over (order by sum(local_fare)desc) fare_rankfrom ttgroup by area_codeAREA_CODE LOCAL_FARE FARE_RANK---------- -------------- ----------5765 104548.72 15761 54225.41 25763 54225.41 25764 53156.77 45762 52039.62 5Elapsed: 00:00:00.01我们可以看到红色标注的地方出现了,跳位,排名3没有出现下面我们再看看dense_rank查询的结果.select area_code,sum(local_fare) local_fare,dense_rank() over (order by sum(local_fare)desc) fare_rankfrom ttgroup by area_code/AREA_CODE LOCAL_FARE FARE_RANK---------- -------------- ----------5765 104548.72 15761 54225.41 25763 54225.41 25764 53156.77 3 这是这里出现了第三名5762 52039.62 4Elapsed: 00:00:00.00在这个例子中,出现了一个第三名,这就是rank和dense_rank的差别,rank如果出现两个相同的数据,那么后面的数据就会直接跳过这个排名,而dense_rank则不会,差别更大的是,row_number哪怕是两个数据完全相同,排名也会不一样,这个特性在我们想找出对应没个条件的唯一记录的时候又很大用处select area_code,sum(local_fare) local_fare,row_number() over (order by sum(local_fare)desc) fare_rankfrom ttgroup by area_code/AREA_CODE LOCAL_FARE FARE_RANK---------- -------------- ----------5765 104548.72 15761 54225.41 25763 54225.41 35764 53156.77 45762 52039.62 5在row_nubmer函数中,我们发现,哪怕sum(local_fare)完全相同,我们还是得到了不一样排名,我们可以利用这个特性剔除数据库中的重复记录.这里的几个例子是为了说明这三个函数的基本用法。
常用Oracle分析函数详解
常⽤Oracle分析函数详解学习步骤:1. 拥有Oracle EBS demo 环境或者 PROD 环境2. copy以下代码进 PL/SQL3. 配合解释分析结果4. 如果⽹页有点乱请复制到TXT中查看/*假设⼀个经理代表了⼀个部门*/SELECT emp.full_name,emp.salary,emp.manager_id,row_number() over(PARTITION BY emp.manager_id ORDER BY emp.salary DESC) row_number_dept, --部门排⾏rownum row_number, --⾏号round((rownum + 1) / 4) page_number, --每4⾏⼀页ntile(2) over(ORDER BY emp.salary DESC) page_number_nt, --平均分成两类AVG(emp.salary) over(PARTITION BY emp.manager_id) avg_salary_department, --该部门薪⽔均值SUM(emp.salary) over(PARTITION BY emp.manager_id) sum_salary_department, --该部门薪⽔总额COUNT(emp.salary) over(PARTITION BY emp.manager_id) count_emp_department, --部门所有的员⼯dense_rank() over(PARTITION BY emp.manager_id ORDER BY emp.salary DESC) rank_salary_dept, --该⼈员的部门薪⽔排⾏dense_rank() over(ORDER BY emp.salary DESC) rank_salary_company, --该⼈员的全公司排⾏MIN(emp.salary) over(PARTITION BY emp.manager_id) min_salary_dept, --部门的最低薪⽔MIN(emp.salary) keep(dense_rank FIRST ORDER BY emp.salary) over(PARTITION BY emp.manager_id) min_salary_dept_first, --部门的最低薪⽔first_value(emp.salary) over(PARTITION BY emp.manager_id ORDER BY emp.salary) min_salary_dept_firstv, --部门的最低薪⽔MAX(emp.salary) over(PARTITION BY emp.manager_id) max_salary_dept, --部门的最⾼薪⽔MAX(emp.salary) keep(dense_rank LAST ORDER BY emp.salary) over(PARTITION BY emp.manager_id) max_salary_dept_last, --部门的最⾼薪⽔last_value(emp.salary) over(PARTITION BY emp.manager_id ORDER BY emp.salary) max_salary_dept_lastv, --部门的最⾼薪⽔lag(emp.full_name, 1, '00') over(ORDER BY emp.salary DESC) last_persion, --薪⽔在⾃⼰前⼀位的⼈lead(emp.full_name, 1, '00') over(ORDER BY emp.salary DESC) next_persion --薪⽔在⾃⼰后⼀位的⼈FROM fwk_tbx_employees empORDER BY emp.salary DESC1. 基本概念理解分析函数1. 顾名思义,分析函数是在主查询结果的基础上进⾏⼀定的分析,如分部门汇总,分部门求均值等等。
Oracle分析函数1
分析函数(OVER) (1)分析函数2(Rank, Dense_rank, row_number) .............................................................................. 错误!未定义书签。
分析函数3(Top/Bottom N、First/Last、NTile) .......................................................................... 错误!未定义书签。
窗口函数....................................................................................................................................... 错误!未定义书签。
报表函数....................................................................................................................................... 错误!未定义书签。
分析函数总结............................................................................................................................... 错误!未定义书签。
26个分析函数.............................................................................................................................. 错误!未定义书签。
Oracle之分析函数
Oracle之分析函数⼀、分析函数 1、分析函数 分析函数是Oracle专门⽤于解决复杂报表统计需求的功能强⼤的函数,它可以在数据中进⾏分组然后计算基于组的某种统计值,并且每⼀组的每⼀⾏都可以返回⼀个统计值。
2、分析函数和聚合函数的区别 普通的聚合函数⽤group by分组,每个分组返回⼀个统计值,⽽分析函数采⽤partition by分组,并且每组每⾏都可以返回⼀个统计值。
3、分析函数的形式 分析函数带有⼀个开窗函数over(),包含分析⼦句。
分析⼦句⼜由下⾯三部分组成: partition by :分组⼦句,表⽰分析函数的计算范围,不同的组互不相⼲; ORDER BY:排序⼦句,表⽰分组后,组内的排序⽅式; ROWS/RANGE:窗⼝⼦句,是在分组(PARTITION BY)后,组内的⼦分组(也称窗⼝),此时分析函数的计算范围窗⼝,⽽不是PARTITON。
窗⼝有两种,ROWS和RANGE; 使⽤形式如下:OVER(PARTITION BY xxx PORDER BY yyy ROWS BETWEEN rowStart AND rowEnd) 注:窗⼝⼦句在这⾥我只说rows⽅式的窗⼝,range⽅式和滑动窗⼝也不提。
⼆、OVER() 函数 1、sql 查询语句的 order by 和 OVER() 函数中的 ORDER BY 的执⾏顺序 分析函数是在整个sql查询结束后(sql语句中的order by的执⾏⽐较特殊)再进⾏的操作, 也就是说sql语句中的order by也会影响分析函数的执⾏结果: [1] 两者⼀致:如果sql语句中的order by满⾜分析函数分析时要求的排序,那么sql语句中的排序将先执⾏,分析函数在分析时就不必再排序; [2] 两者不⼀致:如果sql语句中的order by不满⾜分析函数分析时要求的排序,那么sql语句中的排序将最后在分析函数分析结束后执⾏排序。
2、分析函数中的分组/排序/窗⼝分析函数包含三个分析⼦句:分组(partition by),排序(order by),窗⼝(rows/range)窗⼝就是分析函数分析时要处理的数据范围,就拿sum来说,它是sum窗⼝中的记录⽽不是整个分组中的记录,因此我们在想得到某个栏位的累计值时,我们需要把窗⼝指定到该分组中的第⼀⾏数据到当前⾏, 如果你指定该窗⼝从该分组中的第⼀⾏到最后⼀⾏,那么该组中的每⼀个sum值都会⼀样,即整个组的总和。
oracle分析函数
oracle分析函数
Oracle分析函数是一组可用于处理数据集的函数。
它们可以帮助您计算数据的统计值,如求和、平均值、最小值和最大值。
此外,还可以对数据进行细粒度的分析,如数据分析、排序、汇总和聚合。
Oracle分析函数可以提高您的应用程序的性能,并使您能够缩短查询时间。
Oracle分析函数可以分为三类:统计函数、数据分析函数和排序函数。
统计函数可以帮助您计算数据集的基本统计信息,如求和、平均值、最小值和最大值。
数据分析函数可以帮助您对数据进行更细粒度的分析,如数据分组、汇总和聚合。
排序函数可以帮助您对数据进行排序,以便更好地分析数据。
Oracle分析函数的优点非常明显,它们可以提高您的应用程序的性能,而且可以缩短查询时间。
此外,它们还可以提供准确和可靠的数据。
因此,当您需要对数据进行分析时,Oracle分析函数是一个有用的工具。
Oracle分析函数是一个强大的工具,可以帮助您更有效地处理数据集,从而获得更准确、更可靠的结果。
它们可以帮助您更快地执行复杂的查询,并使您能够更准确地分析和理解数据。
因此,Oracle 分析函数可以极大地提高您的业务分析效率,从而给您带来更大的利润。
oracle 统计分析函数
oracle 统计/分析函数Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。
语法:Sql代码1.<analytic-function>(<argument>,<argument>,...)2.over(3.<query-partition-clause>4.<order-by-clause>5.<windowing-clause>6.)说明:<1> over是关键字,用于标识分析函数。
<2> <analytic-function>是指定的分析函数的名字。
<3> <argument>为参数,分析函数可以选取0-3个参数。
<4> 分区子句<query-partition-clause>的格式为:partition by<value_exp>[,value_expr]...关键字partition by子句根据由分区表达式的条件逻辑地将单个结果集分成N组。
这里的"分区partition"和"组group" 都是同义词。
<5> 排序子句order-by-clause指定数据是如何存在分区内的。
其格式为:order[siblings]by{expr|position|c_alias}[asc|desc][nulls first|nulls last]其中:A.asc|desc:指定了排列顺序。
B.nulls first|nulls last:指定了包含空值的返回行应出现在有序序列中的第一个或最后一个位置。
<6>窗口子句windowing-clause给出一个固定的或变化的数据窗口方法,分析函数将对这些数据进行操作。
oracle分析函数
oracle分析函数Oracle数据库提供了强大的分析函数,这些函数可以用于执行高级数据分析,并得出有关数据集的统计信息。
以下是一些常用的Oracle分析函数:1.ROW_NUMBER(函数ROW_NUMBER(函数返回一个表示每行排序位置的数字。
它通常与ORDERBY子句一起使用,以确定每行的位置。
例如,以下查询将为每个销售订单返回一个唯一的数字,并按订单日期进行排序:```SELECT order_id, order_date, ROW_NUMBER( OVER (ORDER BY order_date) as row_numFROM sales_orders;```2.RANK(函数RANK(函数用于计算一组值的排名。
它将返回一个表示每个值排名的数字,如果有重复的值,则会跳过下一个排名。
例如,以下查询将为每个销售订单返回一个唯一的数字,并按订单总额进行排名:```SELECT order_id, order_total, RANK( OVER (ORDER BYorder_total DESC) as rank_numFROM sales_orders;```3.DENSE_RANK(函数DENSE_RANK(函数类似于RANK(函数,但它不会跳过下一个排名。
如果有两个值具有相同的排名,则它们都将返回相同的排名。
例如,以下查询将为每个销售订单返回一个唯一的数字,并按订单总额进行排名:```SELECT order_id, order_total, DENSE_RANK( OVER (ORDER BY order_total DESC) as dense_rank_numFROM sales_orders;```G(函数和LEAD(函数LAG(函数和LEAD(函数用于访问当前行前一个或后一个行的数据。
例如,以下查询将为每个销售订单返回一个唯一的数字,并显示前一个订单的订单日期和后一个订单的订单日期:```SELECT order_id, order_date, LAG(order_date) OVER (ORDER BY order_date) as prev_order_date,LEAD(order_date) OVER (ORDER BY order_date) asnext_order_dateFROM sales_orders;```5.SUM(函数和AVG(函数SUM(函数和AVG(函数用于计算一组值的总和和平均值。
