MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno)
De verklaring kan worden beschouwd in (ruwweg) van rechts naar links volgorde:
OVER (PARTITION BY deptno)
betekent de rijen opdelen in verschillende groepen vandeptno
; danORDER BY sal
betekent, voor elke partitie, de rijen ordenen opsal
(impliciet met behulp vanASC
eindopdracht); danKEEP (DENSE_RANK FIRST
middelen geven een (opeenvolgende) rangorde aan de geordende rijen voor elke partitie (rijen met identieke waarden voor de ordeningskolommen krijgen dezelfde rangorde) en verwerpen alle rijen die niet als eerste gerangschikt zijn; en tot slotMIN(sal)
voor de resterende rijen van elke partitie, retourneer het minimumloon.
In dit geval de MIN
en DENSE_RANK FIRST
werken beide op de sal
kolom dus zal hetzelfde doen en de KEEP (DENSE_RANK FIRST ORDER BY sal)
is overbodig.
Als u echter een andere kolom voor het minimum gebruikt, kunt u de effecten zien:
SQL Fiddle
Oracle 11g R2 Schema-instellingen :
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;
Query 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
Resultaten :
| 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 |