Много встроенных функций ORACLE использует как в функциях агрегирования, так и в аналитических функциях. Есть ли отличия в результате, который получаем с помощью аналитической функции и с помощью агрегированной функции? Отличия есть, и мы их можем увидеть на простеньких примерчиках построенных на основе функции max.
Рассмотрим два запроса и результаты их выполнения.
CREATE TABLE DBST_TABL
(CITY VARCHAR2(20 BYTE),
NAME VARCHAR2(30 BYTE),
PERIOD VARCHAR2(6 BYTE),
GOODS VARCHAR2(6 BYTE));
insert into dbst_tabl (city,name,period,goods) values ('c1','n1','200601','t0');
insert into dbst_tabl (city,name,period,goods) values ('c1','n1','200601','t0');
insert into dbst_tabl (city,name,period,goods) values ('c1','n1','200601','t0');
insert into dbst_tabl (city,name,period,goods) values ('c1','n1','200601','t0');
insert into dbst_tabl (city,name,period,goods) values ('c1','n1','200601','t1');
insert into dbst_tabl (city,name,period,goods) values ('c1','n1','200601','t2');
insert into dbst_tabl (city,name,period,goods) values ('c1','n1','200601','t3');
insert into dbst_tabl (city,name,period,goods) values ('c1','n1','200602','t1');
insert into dbst_tabl (city,name,period,goods) values ('c1','n1','200602','t2');
insert into dbst_tabl (city,name,period,goods) values ('c1','n1','200603','t3');
insert into dbst_tabl (city,name,period,goods) values ('c1','n1','200603','t4');
insert into dbst_tabl (city,name,period,goods) values ('c1','n1','200603','t5');
insert into dbst_tabl (city,name,period,goods) values ('c1','n2','200601','t0');
insert into dbst_tabl (city,name,period,goods) values ('c1','n2','200601','t2');
insert into dbst_tabl (city,name,period,goods) values ('c1','n2','200601','t3');
insert into dbst_tabl (city,name,period,goods) values ('c1','n2','200601','t4');
insert into dbst_tabl (city,name,period,goods) values ('c1','n4','200603','t3');
insert into dbst_tabl (city,name,period,goods) values ('c1','n4','200603','t4');
insert into dbst_tabl (city,name,period,goods) values ('c1','n4','200603','t5');
insert into dbst_tabl (city,name,period,goods) values ('c1','n4','200604','t1');
insert into dbst_tabl (city,name,period,goods) values ('c1','n4','200604','t2');
insert into dbst_tabl (city,name,period,goods) values ('c1','n4','200604','t3');
insert into dbst_tabl (city,name,period,goods) values ('c2','n2','200601','t0');
insert into dbst_tabl (city,name,period,goods) values ('c2','n2','200601','t2');
insert into dbst_tabl (city,name,period,goods) values ('c2','n2','200601','t3');
insert into dbst_tabl (city,name,period,goods) values ('c2','n2','200601','t4');
insert into dbst_tabl (city,name,period,goods) values ('c2','n3','200601','t5');
insert into dbst_tabl (city,name,period,goods) values ('c2','n3','200602','t1');
insert into dbst_tabl (city,name,period,goods) values ('c2','n3','200602','t2');
insert into dbst_tabl (city,name,period,goods) values ('c2','n4','200603','t3');
insert into dbst_tabl (city,name,period,goods) values ('c3','n4','200603','t4');
insert into dbst_tabl (city,name,period,goods) values ('c3','n4','200603','t5');
insert into dbst_tabl (city,name,period,goods) values ('c3','n4','200604','t1');
insert into dbst_tabl (city,name,period,goods) values ('c3','n4','200604','t2');
Таблица разбивается по секциям (разделам) относительно CITY, NAME. Над каждой секцией проводиться операция max(GOODS). Затем получаем результат путем добавления к каждой записи значения max(GOODS) в зависимости от принадлежности записи к определённой секции (разделу).
Подробно посмотрите в моей статье про аналитические функции.