Поскольку вложенные запросы (в WHERE) снижают скорость обработки запроса, их иногда выносят отдельно с использованием WITH.
А можно ли выносить в WITH те вложенные запросы, которые идут в селектах? И если да, то как?
Пример. Вот корректный запрос с вложением в селекте:
SELECT title,
author,
amount,
(SELECT MAX(amount)
FROM book) - amount AS Заказ
FROM book
HAVING Заказ > 0;
Его результат на скрине:
У меня не получается переписать его с использованием 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 понятия не имею. Подскажите, пожалуйста.