У меня есть запрос SQL:
select title, scale / next_scale, c
from ( select title, scale, scale*D0 AS c,
lead(scale) over(partition by title order by scale asc) as next_scale,
row_number() over(partition by title order by scale asc) as agg_row
from signatures
) agg
where agg_row = 1;
и работает как положено. Однако то, что я действительно хочу, чтобы значение «масштабирования» сортировки было арифметической операцией между несколькими столбцами, поэтому я попытался использовать предложение AS (показано выше) и изменить запрос следующим образом:
select title, scale / next_scale, c
from ( select title, scale, scale*D0 AS c,
lead(scale) over(partition by title order by c asc) as next_scale,
row_number() over(partition by title order by c asc) as agg_row
from signatures
) agg
where agg_row = 1;
Однако, это не удается на ORDER BY c
. Почему это? Я могу заменить ORDER BY scale*D0
, и он работает просто отлично. Тем не менее, я в конечном итоге захочу использовать такой термин, как: scale*D0*D1*D2*...*D100
; и я не хочу рассчитывать это 3 разных раза - не говоря уже о физической длине запроса. Я надеюсь получить scale*D0*D1*D2*...*D100 AS c
, а затем ORDER BY c
.
Возможно ли это?
Я использую PostgreSQL.
Большое спасибо,
Brett