Задать вопрос
@LordOfARing

Как вложенный запрос в select'ах вынести отдельно в WITH?

Поскольку вложенные запросы (в WHERE) снижают скорость обработки запроса, их иногда выносят отдельно с использованием WITH.

А можно ли выносить в WITH те вложенные запросы, которые идут в селектах? И если да, то как?

Пример. Вот корректный запрос с вложением в селекте:
SELECT title,
       author,
       amount,
  (SELECT MAX(amount)
   FROM book) - amount AS Заказ
FROM book
HAVING Заказ > 0;


Его результат на скрине: 62a4c2dc3f384374296126.png

У меня не получается переписать его с использованием WITH.
Вот что сделал:

WITH 
Max_amount as (
    SELECT MAX(amount) as Заказ FROM book
)
SELECT title, author, amount, Max_amount.Заказ - amount FROM book
INNER JOIN Max_amount 
ON Max_amount.Заказ=book.amount


Соединяю по ключам, но ключ в Max_amount это максимальное знаечние. И оно приравнивается к максимальному значению в book. И в результирующий набор попадает, естественно, только 1 строчка (с макс. значением). Как переписать запрос с WITH понятия не имею. Подскажите, пожалуйста.
  • Вопрос задан
  • 153 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Полностью уберите условие присоединения. Тогда строка из Max_amount будет присоединена к каждой строке из book.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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