Мое (ограниченное) понимание функции Rank() заключается в том, что если n строк соответствуют критериям раздела, на основе упорядочения, первый набор несоответствующих строк получает ранг 1, затем набор из 1 добавляется для следующего ранга строк. Как он переходит к ранге 2? В следующем наборе данных у меня есть 3 строки ранга 9 (3 сопоставимые строки), а следующий рейтинг равен 12 (9 + 3 = 12), который затем имеет 2 строки из 12 (две соответствующие строки ранга 12) и следующий ранг тогда 14. Я не понимаю строки ранга 1 и 2. Каков процесс увеличения рядов этих строк?Oracle pl/sql - как оценивает функция Rank()
Вот мой исходный код
select Pos_ID, work_city, organization
RANK() OVER (PARTITION BY work_city ORDER BY organization) rnk
from DDTMS.POSITIONS
where pos_ID < 14800 order by rnk;
и здесь есть (частично) результат набора данных (я добавил периоды, чтобы держать его несколько отформатированы для более удобного просмотра - первая строка строка заголовка)
POS_ID WORK_CITY___________ ORGANIZATION________ RNK
14741 QUANTICO............ HQ US MARINE CORPS.. 1
14765 REDSTONE ARSENAL.... US ARMY AVN & MISSLE 1
14769 SAN DIEGO........... SPACE & NAVAL WARFAR 1
14776 THE HAGUE........... USD(COMPTROLLER).... 1
14790 VICKSBURG........... U S ARMY ENGR RESEAR 1
14732 WARREN.............. US ARMY TANK-AUTOMOT 1
14777 WASHINGTON.......... HQUSACE MILITARY PRO 1
14774 WASHINGTON NAVY YARD COMMANDER, NAVAL INS 1
14771 WRIGHT PATTERSON AFB AF AUDIT AGENCY..... 1
14749 EGLIN AFB........... AIR ARMAMENT........ 2
14764 WRIGHT PATTERSON AFB AF MUSEUM........... 2
14789 ARLINGTON........... AS(LOGISTICS & MATER 2
14783 ABERDEEN PROV GRND.. USA EDGEWOOD CHEM AN 2
14779 FORT BELVOIR........ DLA LOGISTICS OPERAT 2
14735 WASHINGTON.......... NAVSEA HQ FIELD SUPP 2
14733 PENTAGON, ARLINGTON. IMMEDIATE OFC OF CHI 2
14738 PENTAGON, ARLINGTON. IMMEDIATE OFC OF CHI 2
14762 FORT MEADE.......... DISA, GIG OPERATIONS 2
14739 WASHINGTON NAVY YARD PEO FOR SUBMARIN.... 2
14737 ARLINGTON........... ASD(ASIAN & PACIFIC. 3
14775 ABERDEEN PROV GRND.. USA HQ COMM ELECT CM 3
14731 FORT BELVOIR........ OFC OF THE CHIEF OF. 3
14729 ARLINGTON........... DEFENSE SECURITY COO 4
14745 ARLINGTON........... DIR, COST ASSESSMENT 5
14736 ARLINGTON........... HQDA, ODCSLOG....... 6
14788 ARLINGTON........... HQDA, OSA, OFC OF TH 7
14760 ARLINGTON........... OASD (HOMELAND DEF & 8
14740 ARLINGTON........... OASD (SO/LIC & INTER 9
14773 ARLINGTON........... OASD (SO/LIC & INTER 9
14743 ARLINGTON........... OASD (SO/LIC & INTER 9
14750 ARLINGTON........... OASD(ISA)........... 12
14751 ARLINGTON........... OASD(ISA)........... 12
14778 ARLINGTON........... OFC ASST SECY OF ARM 14
14746 ARLINGTON........... OFC DIR, ADMIN/MGMT. 15
14753 ARLINGTON........... OFC GEN COUNSEL..... 16
14734 ARLINGTON........... OFC SEC OF DEF...... 17
14768 ARLINGTON........... OFFICE OF NAVAL RESE 18
14781 ARLINGTON........... ONI................. 19
14757 ARLINGTON........... U S AIR FORCE....... 20
14763 ARLINGTON........... U S AIR FORCE HQ.... 21
я оставил из псевдоним Rnk и заказ на внешней части запроса. Просто обновил это. –
То, что я думаю о 'RANK()', состоит в том, что оно возвращает количество записей, которые были раньше/меньше текущей записи, плюс 1. Таким образом, rank = 1 означает, что есть нулевые записи, ранее или меньше, чем текущая запись; rank = 2 означает, что существует ровно 1 запись раньше/меньше текущей записи; ранг 12 означает, что есть 11 записей ранее/меньше, чем текущая запись. –