Например, есть таблица Prices с ценами. все id в таблице отсортированы по возрастанию.
Нужно получить диапазоны цен, где максимальная цена больше определенного числа.
Вот пример запроса;
SELECT p1.id as id1, p2.id as id2, (SELECT MAX(price) FROM Prices p3 WHERE p3.id >= id1 AND p3.id <= id2 )
FROM Prices as p1, Prices as p2
WHERE (SELECT MAX(price) FROM Prices p3 WHERE p3.id >= id1 AND p3.id <= id2 ) > 150
Т.е. из запроса видно, что у нас есть две одинаковые конструкции. Можно ли избавиться от дублирования? Т.е. в приведенном примере дублируется конструкция
(SELECT MAX(price) FROM Prices p3 WHERE p3.id >= id1 AND p3.id <= id2 )
Можно ли, например, задать как-то псевдоним для конструкции из where и использовать ее в select?
Т.е. в идеале хотелось бы получить следующее:
SELECT p1.id as id1, p2.id as id2, subq
FROM Prices as p1, Prices as p2
WHERE (SELECT MAX(price) FROM Prices p3 WHERE p3.id >= id1 AND p3.id <= id2 ) as subq> 150
Но так не работает.
Подскажите, пожалуйста как избавиться от дублирования?
Использую postgresql, но если аналогичные проблемы есть в других субд, было бы интересно увидеть решение