@koliane

Есть ли возможность избежать дублей подзапросов?

Есть таблица, в которой хранятся, например, цены на определенную валютную пару. таблица выглядит так:
fcb89dc533.jpg
Нужно получить выборку, где в первом столбце будет цена из определенного среза этой таблицы, а во втором столбце - тоже цена из этого среза, но больше, чем первая.

Т.е., запрос будет выглядеть следующим образом:
SELECT part_1.price, part_2.price 
FROM (SELECT * FROM prices WHERE id > 1000 AND id < 2000000) AS part_1, (SELECT * FROM prices WHERE id > 1000 AND id < 2000000) AS part_2
WHERE part_1.price < part_2.price


Из запроса видно, что у нас 2 одинаковых подзапроса. Но это, как я понимаю, не по "феншую", т.к. одни и те же данные мы получаем несколько раз.
Отсюда вопрос, можно ли этот запрос переписать так, чтобы эти подзапросы не дублировась? И если можно, то как?

Задача гипотетическая, настоящая задача сложнее и дублей этих там будет гораздо больше. Т.е., данный пример привел, чтобы была ясна проблема.
Т.е., нужно получить ответ именно по дублям, как от них избавиться

Использую postgresql
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
Bavashi
@Bavashi
Можно вынести дублирующие запросы в переменную через with, но в "итоговом" запросе все равно придется писать две одинаковых переменных. Разница будет только в том, что если потребуется поменять дублирующийся запрос, то менять нужно будет только в одном месте. То есть:

WITH myQuery AS (SELECT * FROM prices WHERE id > 1000 AND id < 2000000)

SELECT part_1.price, part_2.price
FROM myQuery AS part_1, myQuery AS part_2
WHERE part_1.price < part_2.price;


P.S. Есть интересная статья на хабре по использованию конструкции with ... as в PostgreSQL 12.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
...встаю, одеваюсь, завтракаю и еду домой...
GROUP BY + HAVING
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы