Oracle ---- 窗口函数
Posted Scott
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle ---- 窗口函数相关的知识,希望对你有一定的参考价值。
今天讲一下错行函数(lag,lead)函数如何使用窗口函数。
Lag(exp_str,offset,defval) over()
Lead(exp_str,offset,defval) over()
--exp_str要取的列
--offset取偏移后的第几行数据
--defval:没有符合条件的默认值
下面是表“test_student_score”的全部记录。
SQL> select t.* from test_student_score t;
STUDENT_ID SUBJECT_ID SCORE
---------- ---------- ----------
1 1 90
3 4 91
3 1 93
3 3 94
3 2 94
1 4 95
2 2 95
2 4 97
2 1 98
1 2 98
2 3 98
1 3 99
12行が選択されました。
先看一下不用这两个函数式的原始输出:
SQL> select * from test_student_score t where t.subject_id = 3;
STUDENT_ID SUBJECT_ID SCORE
---------- ---------- ----------
1 3 99
2 3 98
3 3 94
下面我们不仅要看“score”,还要看看排在他前一位的“score”。
SQL> select t.subject_id,
t.subject_id,
lag(t.score, 1, -1) over(order by t.score) as lags,
t.score
from test_student_score t
where t.subject_id = 3; 2 3 4 5 6
SUBJECT_ID SUBJECT_ID LAGS SCORE
---------- ---------- ---------- ----------
3 3 -1 94
3 3 94 98
3 3 98 99
“lags”就是前一位的“score”。
现在我们还要看看排在他后一位的“score”。
SQL> select t.subject_id,
t.subject_id,
lag(t.score, 1, -1) over(order by t.score) as lags,
t.score,
lead(t.score, 1, -1) over(order by t.score) as leads
from test_student_score t
where t.subject_id = 3;
SUBJECT_ID SUBJECT_ID LAGS SCORE LEADS
---------- ---------- ---------- ---------- ----------
3 3 -1 94 98
3 3 94 98 99
3 3 98 99 -1
“leads”就是后一位的“score”。
Do you get it?
2021/04/19 @ Dalian
以上是关于Oracle ---- 窗口函数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Toad for Oracle 中使用自定义代码片段?
Oracle开发之窗口函数 rows between unbounded preceding and current row