MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno)
कथन पर (मोटे तौर पर) दाएं से बाएं क्रम में विचार किया जा सकता है:
OVER (PARTITION BY deptno)
इसका अर्थ है पंक्तियों कोdeptno
. के अलग-अलग समूहों में विभाजित करना; तब-
ORDER BY sal
मतलब, प्रत्येक विभाजन के लिए, पंक्तियों कोsal
. द्वारा क्रमित करें (निहित रूप सेASC
. का उपयोग करना अंतिम आदेश); तब KEEP (DENSE_RANK FIRST
इसका मतलब है कि प्रत्येक विभाजन के लिए क्रमबद्ध पंक्तियों को एक (लगातार) रैंकिंग दें (क्रमबद्ध स्तंभों के लिए समान मूल्यों वाली पंक्तियों को समान रैंक दी जाएगी) और उन सभी पंक्तियों को त्याग दें जो पहले स्थान पर नहीं हैं; और अंत मेंMIN(sal)
प्रत्येक विभाजन की शेष पंक्तियों के लिए, न्यूनतम वेतन लौटाएं।
इस मामले में MIN
और DENSE_RANK FIRST
दोनों sal
. पर काम कर रहे हैं कॉलम तो वही काम करेगा और KEEP (DENSE_RANK FIRST ORDER BY sal)
बेमानी है।
हालांकि यदि आप न्यूनतम के लिए एक अलग कॉलम का उपयोग करते हैं तो आप प्रभाव देख सकते हैं:
एसक्यूएल फिडल
Oracle 11g R2 स्कीमा सेटअप :
CREATE TABLE test (name, sal, deptno) AS
SELECT 'a', 1, 1 FROM DUAL
UNION ALL SELECT 'b', 1, 1 FROM DUAL
UNION ALL SELECT 'c', 1, 1 FROM DUAL
UNION ALL SELECT 'd', 2, 1 FROM DUAL
UNION ALL SELECT 'e', 3, 1 FROM DUAL
UNION ALL SELECT 'f', 3, 1 FROM DUAL
UNION ALL SELECT 'g', 4, 2 FROM DUAL
UNION ALL SELECT 'h', 4, 2 FROM DUAL
UNION ALL SELECT 'i', 5, 2 FROM DUAL
UNION ALL SELECT 'j', 5, 2 FROM DUAL;
क्वेरी 1 :
SELECT DISTINCT
MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno) AS min_sal_first_sal,
MAX(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno) AS max_sal_first_sal,
MIN(name) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno) AS min_name_first_sal,
MAX(name) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno) AS max_name_first_sal,
MIN(name) KEEP (DENSE_RANK LAST ORDER BY sal) OVER (PARTITION BY deptno) AS min_name_last_sal,
MAX(name) KEEP (DENSE_RANK LAST ORDER BY sal) OVER (PARTITION BY deptno) AS max_name_last_sal,
deptno
FROM test
परिणाम :
| MIN_SAL_FIRST_SAL | MAX_SAL_FIRST_SAL | MIN_NAME_FIRST_SAL | MAX_NAME_FIRST_SAL | MIN_NAME_LAST_SAL | MAX_NAME_LAST_SAL | DEPTNO |
|-------------------|-------------------|--------------------|--------------------|-------------------|-------------------|--------|
| 1 | 1 | a | c | e | f | 1 |
| 4 | 4 | g | h | i | j | 2 |