Автор: Artix (user.su)
Задача: есть значение долей, которые могут отличаться в рамках проекта и без проекта.
Нужно: есть есть проект, взять проектные значения, иначе - обычные.
Решение:
drop table if exists prt;
create table prt (
id integer primary key,
prj integer,
part integer,
val integer
);
insert into prt (prj, part, val) values (1,1,20);
insert into prt (prj, part, val) values (2,2,20);
insert into prt (prj, part, val) values (0,3,10);
insert into prt (prj, part, val) values (0,1,10);
insert into prt (prj, part, val) values (1,4,15);
insert into prt (prj, part, val) values (3,4,20);
insert into prt (prj, part, val) values (2,5,5);
insert into prt (prj, part, val) values (0,6,10);
.mode column
.headers on
select * from prt;
with T as (
select
rank() over (partition by part order by prj desc) as rnk,
prj,
part,
val
from prt
order by part
)
select * from T where rnk=1;
Комментарий:
"partion by part" = каждую долю рассматриваем в рамках отдельной группы
"order by prj desk" = сначала отбираем проектные доли
#
SQL Справочник v0.05 © 2007-2025 Igor Salnikov aka SunDoctor