ПОДЗАПРОСЫ В FROM

ПОДЗАПРОСЫ В FROM

Подзапросы в FROM выглядят так:

select
    column1,
    column2
from
    (
    select
        column1,
        column2
    from table1
    ) as t

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

Пара важных моментов про вложенные запросы в FROM:

  1. После подзапроса нужно всегда писать алиас и задавать промежуточное название таблицы, которую мы получаем.
  2. Подзапросы также обладают бесконечной вложенностью.

Сейчас из описания нам пока что не слишком понятно, зачем нужны подзапросы, поэтому давайте рассмотрим простой пример:

Задача:

Из таблицы 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

Этот пример достаточно показательный, в определенных случаях без подзапроса не обойтись.