@koliane

Можно ли в SQL создавать псевдонимы в конструкции where и использовать его в select?

Например, есть таблица Prices с ценами. все id в таблице отсортированы по возрастанию.
2b1cb567f7.jpg
Нужно получить диапазоны цен, где максимальная цена больше определенного числа.

Вот пример запроса;
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, но если аналогичные проблемы есть в других субд, было бы интересно увидеть решение
  • Вопрос задан
  • 199 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Нужно получить диапазоны цен, где максимальная цена больше определенного числа.

Мне кажется вам нужен вовсе:
select product_id, min(price), max(price) from prices group by product_id having max(price)>= ?


А отвечая на вопрос в лоб - lateral join'ом перенести подзапрос в секцию from и всё.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы