Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Fungsi Analitik LEAD dan LAG

Fungsi utama di oracle

Fungsi LEAD di Oracle adalah fungsi Analytic yang memiliki kemampuan untuk menghitung ekspresi pada baris berikutnya (baris yang akan datang setelah baris saat ini) dan mengembalikan nilai ke baris saat ini . Sintaks umum LEAD ditunjukkan di bawah ini:

LEAD (<expr>, <offset>, <default>) OVER (<analytic_clause>)

adalah ekspresi untuk menghitung dari baris terdepan.
adalah indeks baris terdepan relatif terhadap baris saat ini dan nilai defaultnya adalah 1
adalah nilai yang akan dikembalikan jika menunjuk ke baris di luar rentang partisi. Jika Anda melewatkan default, maka fungsi akan mengembalikan NULL.

Mari kita ambil contoh untuk merasakannya. Pertama mari kita siapkan contoh datanya

CREATE TABLE "DEPT"
( "DEPTNO" NUMBER(2,0),
"DNAME" VARCHAR2(14),
"LOC" VARCHAR2(13),
CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO")
)

CREATE TABLE "EMP"
( "EMPNO" NUMBER(4,0),
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0),
CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"),
CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
REFERENCES "DEPT" ("DEPTNO") ENABLE
);

SQL> desc emp
Name Null? Type
---- ----  -----
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)

SQL> desc dept
Name Null? Type
---- -----  ----
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)


insert into DEPT values(10, 'ACCOUNTING', 'NEW YORK');
insert into dept values(20, 'RESEARCH', 'DALLAS');
insert into dept values(30, 'RESEARCH', 'DELHI');
insert into dept values(40, 'RESEARCH', 'MUMBAI');
commit;

insert into emp values( 7839, 'Clark', 'MANAGER', 7839, to_date('9-6-2008','dd-mm-yyyy'), 28573, null, 10 );
insert into emp values( 7782, 'Clara', 'MANAGER', 7839, to_date('9-6-2008','dd-mm-yyyy'), 0, null, 10 );
insert into emp values( 7934, 'Blake', 'MANAGER', 7839, to_date('1-5-2007','dd-mm-yyyy'), 0, null, 10 );
insert into emp values( 7788, 'Scott', 'ANALYST', 7788, to_date('9-6-2012','dd-mm-yyyy'), 30000, null, 20 );
insert into emp values( 7902, 'Bill', 'ANALYST', 7832, to_date('9-6-2012','dd-mm-yyyy'), 30000, null, 20 );
insert into emp values( 7876, 'TPM', 'ANALYST', 7566, to_date('9-6-2017','dd-mm-yyyy'), 11000, null, 20 );
insert into emp values( 7369, 'TPM1', 'ANALYST', 7566, to_date('9-6-2017','dd-mm-yyyy'), 8000, null, 20 );

insert into emp values( 7698, 'A1', 'ANALYST', 7788, to_date('9-6-2017','dd-mm-yyyy'), 28500, null, 30 );
insert into emp values( 7499, 'A2', 'ANALYST', 7698, to_date('9-7-2017','dd-mm-yyyy'), 16000, null, 30 );
insert into emp values( 7844, 'A3', 'ANALYST', 7698, to_date('9-7-2017','dd-mm-yyyy'), 15000, null, 30 );
insert into emp values( 7654, 'A4', 'ANALYST', 7698, to_date('9-7-2017','dd-mm-yyyy'), 12500, null, 30 );
insert into emp values( 7521, 'A5', 'ANALYST', 7698, to_date('9-7-2017','dd-mm-yyyy'), 12500, null, 30 );
insert into emp values( 7900, 'A6', 'ANALYST', 77698, to_date('9-7-2017','dd-mm-yyyy'), 0, null, 30 );
commit;

Sekarang kita dapat menggunakan Fungsi Lead di Oracle sesuai permintaan di bawah ini

SQL> SELECT deptno, empno, sal,LEAD(sal, 1, 0) OVER ( partition by deptno ORDER BY sal DESC NULLS LAST) NEXT_LOWER_SAL FROM emp;

Mengambil Nilai Default Berbeda

SELECT deptno, empno, sal,LEAD(sal, 1,100) OVER ( partition by deptno ORDER BY sal DESC NULLS LAST) NEXT_LOWER_SAL FROM emp;

Jika tidak memberikan nilai apa pun untuk default, maka itu memberikan nol di mana tidak ada nilai. Ini ditunjukkan pada kueri di bawah ini

SELECT deptno, empno, sal,LEAD(sal) OVER ( partition by deptno ORDER BY sal DESC NULLS LAST) NEXT_LOWER_SAL FROM emp;

Fungsi LAG di Oracle

Demikian pula, LAG menyediakan teknik untuk menghitung pada baris sebelumnya dan mengembalikan nilai ke baris saat ini

LAG (<expr>, <offset>, <default>) OVER (<analytic_clause>)

adalah ekspresi yang akan dihitung dari baris sebelumnya.
adalah indeks baris sebelumnya relatif terhadap baris saat ini dan nilai defaultnya adalah 1
adalah nilai yang akan dikembalikan jika menunjuk ke baris di luar rentang partisi. Jika Anda melewatkan default, maka fungsi akan mengembalikan NULL.

Mengambil kumpulan data yang sama seperti sebelumnya

SQL> SELECT deptno, empno, sal,LAG(sal, 1,0) OVER ( partition by deptno ORDER BY sal DESC NULLS LAST) LAST_HIGH_SAL FROM emp;

Jika tidak memberikan nilai apa pun untuk default, maka itu memberikan nol di mana tidak ada nilai. Ini ditunjukkan pada kueri di bawah ini

SQL> SELECT deptno, empno, sal,LAG(sal) OVER ( partition by deptno ORDER BY sal DESC NULLS LAST) LAST_HIGH_SAL FROM emp;

Saya harap Anda menyukai artikel ini tentang fungsi Lead dan Lag di Oracle. Ini bisa sangat berguna di banyak bidang. Harap berikan umpan balik

Artikel Terkait
Pertanyaan Wawancara Oracle
Fungsi analitik di Oracle
Fungsi RANK di Oracle
Fungsi Dense_Rank di Oracle
Fungsi NULLIF di Oracle
https://docs.Oracle .com/en/database/Oracle/Oracle-database/12.2/sqlrf/LEAD.html#GUID-0A0481F1-E98F-4535-A739-FCCA8D1B5B77


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa yang dimaksud dengan tabel BIN$... di tabel ALL_TAB_COLUMNS Oracle?

  2. PL/SQL hak istimewa yang tidak mencukupi dalam kueri dimungkinkan secara manual

  3. Apa operator rangkaian string di Oracle?

  4. Bagaimana cara mengubah format tanggal dari MM/DD/YYYY ke YYYY-MM-DD di PL/SQL?

  5. Bergabunglah dengan Forum Tanya Jawab untuk Pengembang