Подготовка:
drop table if exists empsalary;
create table empsalary (
depname text,
empno int,
salary int
);
insert into empsalary values
('develop', 11, 5200),
('develop', 7, 4200),
('develop', 9, 4500),
('develop', 8, 6000),
('develop', 10, 5200),
('personel', 5, 3500),
('personel', 2, 3900),
('sales', 3, 4800),
('sales', 1, 5000),
('sales', 4, 4800),
('develop', 12, 4600);
Раньше никогда не использовал оконные функции. Начал разбираться, понял как работают по отдельности (один over в select). Не пойму как несколько оконных функций вместе работают. Особенно интересно в данном примере почему строка (‘personel’, 5, 3500) вылезла первой.
SELECT depname, empno, salary,
rank() OVER (PARTITION BY depname ORDER BY salary DESC),
rank() OVER (PARTITION BY salary ORDER BY empno ASC)
FROM empsalary;