Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

LEAD और LAG विश्लेषणात्मक कार्य

ओरेकल में लीड फ़ंक्शन

Oracle में LEAD फ़ंक्शन एक विश्लेषणात्मक फ़ंक्शन है जिसमें अगली पंक्तियों पर एक अभिव्यक्ति की गणना करने की क्षमता है (पंक्तियाँ जो वर्तमान पंक्ति के बाद आने वाली हैं) और मान को वर्तमान पंक्ति में लौटाती हैं . LEAD का सामान्य सिंटैक्स नीचे दिखाया गया है:

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

अग्रणी पंक्ति से गणना करने के लिए अभिव्यक्ति है।
वर्तमान पंक्ति के सापेक्ष अग्रणी पंक्ति की अनुक्रमणिका है और इसका डिफ़ॉल्ट मान 1
लौटने का मान है यदि <ऑफ़सेट> विभाजन सीमा के बाहर एक पंक्ति की ओर इशारा करता है। यदि आप डिफ़ॉल्ट को छोड़ देते हैं, तो फ़ंक्शन NULL वापस आ जाएगा।

इसे महसूस करने के लिए एक उदाहरण लेते हैं। पहले उदाहरण डेटा तैयार करते हैं

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;

अब हम नीचे दी गई क्वेरी के अनुसार Oracle में लीड फ़ंक्शन का उपयोग कर सकते हैं

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

भिन्न डिफ़ॉल्ट मान लेना

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

यदि डिफ़ॉल्ट के लिए कोई मान नहीं देते हैं, तो यह शून्य देता है जहां कोई मूल्य नहीं है। यह नीचे क्वेरी में दिखाया गया है

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

Oracle में LAG फ़ंक्शन

इसी प्रकार LAG पिछली पंक्तियों पर गणना करने और मान को वर्तमान पंक्ति में वापस करने की तकनीक प्रदान करता है

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

पिछली पंक्ति से गणना करने के लिए अभिव्यक्ति है।
वर्तमान पंक्ति के सापेक्ष पिछली पंक्ति की अनुक्रमणिका है और इसका डिफ़ॉल्ट मान 1
है जो वापस आने वाला मान है यदि <ऑफ़सेट> विभाजन सीमा के बाहर एक पंक्ति की ओर इशारा करता है। यदि आप डिफ़ॉल्ट को छोड़ देते हैं, तो फ़ंक्शन NULL वापस आ जाएगा।

पहले जैसा ही डेटा सेट लेना

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

यदि डिफ़ॉल्ट के लिए कोई मान नहीं देते हैं, तो यह शून्य देता है जहां कोई मूल्य नहीं है। यह नीचे क्वेरी में दिखाया गया है

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

मुझे उम्मीद है कि आपको Oracle में लीड और लैग फंक्शन पर यह लेख पसंद आया होगा। ये कई क्षेत्रों में बहुत उपयोगी हो सकते हैं। कृपया फ़ीडबैक प्रदान करें

संबंधित लेख
Oracle साक्षात्कार प्रश्न
Oracle में विश्लेषणात्मक कार्य
Oracle में RANK फ़ंक्शन
Oracle में Dense_Rank फ़ंक्शन
Oracle में NULLIF फ़ंक्शन
https://docs.oracle .com/hi/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. एम-एम संबंध लागू करने के लिए ट्रिगर

  2. oracle में अनुक्रम के साथ तालिका बनाएं

  3. ओरेकल के लिए सी # पैरामीटरयुक्त प्रश्न - गंभीर और खतरनाक बग!

  4. बिना ब्राउज़र के Oracle फॉर्म को स्टैंडअलोन के रूप में चलाएं

  5. अपवाद होने पर डेटाबेस कनेक्शन को बंद करने के लिए सर्वश्रेष्ठ डिज़ाइन पैटर्न