MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) НАД (РАЗДЕЛЕНИЕ ПО deptno)
Изявлението може да се разглежда в (приблизително) ред отдясно наляво:
НАД (РАЗДЕЛЯНЕ ПО deptno)
означава разделяне на редовете на отделни групи отdeptno
; след товаПОРЪЧАЙ ПО sal
означава, че за всеки дял подредете редовете поsal
(имплицитно с помощта наASC
крайна поръчка); след товаПАЗЕТЕ (ПЪРВО DENSE_RANK
означава да се даде (последователно) класиране на подредените редове за всеки дял (редове с идентични стойности за подредените колони ще получат един и същ ранг) и отхвърли всички редове, които не са класирани първи; и накраяMIN(sal)
за останалите редове на всеки дял, върнете минималната заплата.
В този случай MIN
и DENSE_RANK FIRST
и двете работят на sal
колона, така че ще направи същото нещо и KEEP (DENSE_RANK FIRST ORDER BY sal)
е излишно.
Ако обаче използвате различна колона за минимума, тогава можете да видите ефектите:
SQL Fiddle
Настройка на схемата на Oracle 11g R2 :
СЪЗДАВАНЕ НА ТАБЛИЦА тест (име, sal, deptno) ASSELECT 'a', 1, 1 ОТ DUALUNION ALL SELECT 'b', 1, 1 ОТ DUALUNION ALL SELECT 'c', 1, 1 ОТ DUALUNION ALL SELECT 'd', 2, 1 ОТ DUALUNION ALL SELECT 'e', 3, 1 ОТ DUALUNION ALL SELECT 'f', 3, 1 ОТ DUALUNION ALL SELECT 'g', 4, 2 ОТ DUALUNION ALL SELECT 'h', 4, 2 ОТ DUALUNION ВСИЧКИ ИЗБЕРЕТЕ 'i', 5, 2 ОТ DUALUNION ВСИЧКИ ИЗБЕРЕТЕ 'j', 5, 2 ОТ DUAL;
Запитване 1 :
ИЗБЕРЕТЕ DISTINCT MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) NAVER (PARTITION BY deptno) AS min_sal_first_sal, MAX(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) НАД (PARTITION BY sal_ deptno) AS_ MIN(име) 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, LASTKEEPRANK 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, deptnoFROM тест
Резултати :
<предварителен код>| 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 | а | в | д | е | 1 || 4 | 4 | g | ч | аз | j | 2 |