Привет, пытаюсь выполнить простой запрос, а что-то никак не получается...
Имеем таблицу со следующими полями:
create table ags_tmp
(
f_1 integer, -- месяц
f_2 integer, -- подразделение
f_3 integer -- фонд заработной платы
);
/
Вносим данные:
insert into ags_tmp values (1, 1, 100);
insert into ags_tmp values (1, 2, 150);
insert into ags_tmp values (2, 1, 130);
insert into ags_tmp values (2, 2, 100);
Необходимо узнать в каком месяце, какое подразделение имело максимальный фонд заработной платы (т.е. запись №2 и №3).
Т.е. те записи, которые мне нужны я могу получить выборкой:
select f_1, max(f_3)
from ags_tmp
group by f_1;
Данный запрос возвращает мне максимальный заработный фонд за определенный месяц. Но мне еще нужно знать какое подразделение имело данный заработный фонд. Выборка:
select f_1, f_2, max(f_3)
from ags_tmp
group by f_1, f_2;
естественно возвращает мне уже 4 записи...
Так как мне выбрать максимальный заработный фонд, номер подразделения по месяцам?
Здравствуйте, Аноним, Вы писали:
А>Так как мне выбрать максимальный заработный фонд, номер подразделения по месяцам?
SELECT tt.f_1, tt.f_2, tt.f_3
FROM (SELECT f_1, f_2, f_3, MAX (f_3) OVER (PARTITION BY f_1) AS ms
FROM ags_tmp) tt
WHERE tt.f_3 = tt.ms
SELECT tmp.f_1, tmp.f_2, tmp.f_3
FROM ags_tmp tmp,
(SELECT f_1, MAX (f_3) AS ms
FROM ags_tmp
GROUP BY f_1) t
WHERE tmp.f_3 = t.ms
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>Так как мне выбрать максимальный заработный фонд, номер подразделения по месяцам?
А>А>SELECT tt.f_1, tt.f_2, tt.f_3
А> FROM (SELECT f_1, f_2, f_3, MAX (f_3) OVER (PARTITION BY f_1) AS ms
А> FROM ags_tmp) tt
А> WHERE tt.f_3 = tt.ms
А>
А>А>SELECT tmp.f_1, tmp.f_2, tmp.f_3
А> FROM ags_tmp tmp,
А> (SELECT f_1, MAX (f_3) AS ms
А> FROM ags_tmp
А> GROUP BY f_1) t
А> WHERE tmp.f_3 = t.ms
А>
Спасибо! Нужно почитать про аналитические функции...