Подзапросы в FROM
выглядят так:
select
column1,
column2
from
(
select
column1,
column2
from table1
) as t
По сути, мы просто вместо названия таблицы написали вложенный запрос, который возвращает нам уже обработанную таблицу. То есть, мы можем провести некоторые манипуляции с таблицей, например, сгруппировать ее или применить над ней условие, а после использовать ее как источник данных и выполнять операции повторно.
Пара важных моментов про вложенные запросы в FROM
:
Сейчас из описания нам пока что не слишком понятно, зачем нужны подзапросы, поэтому давайте рассмотрим простой пример:
Задача:
Из таблицы supermarket_inventory
необходимо посчитать среднее количество товара, которое находятся на складах магазинов, для каждого района.
Сразу понятно, что одним запросом мы не сможем решить эту задачу, потому что в начале нам нужно посчитать сумму товара для каждого магазина, а потом среднее получившихся сумм для каждого района. В этом нам и поможет использование подзапроса:
select
neighborhood,
avg(total_quantity) as avg_total_quantity
from
(
select
neighborhood,
StoreName,
sum(QuantityAvailable) as total_quantity
from
supermarket_inventory
group by
neighborhood,
StoreName
) as t
group by
neighborhood
Этот пример достаточно показательный, в определенных случаях без подзапроса не обойтись.