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

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

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

В этом случае подзапрос должен всегда возвращать 1 значение

with cte as (
select
    club,
    avg(overall) as avg_overall
from
    fifa_players_2018
group by
    club
order by
    avg_overall desc
limit 1
    )
select
    club,
    short_name,
    overall,
    (select avg_overall from cte ) as avg_overall
from
    fifa_players_2018 as players
where club = (select club from cte)
order by
    overall desc
limit 5

Запомните, подзапрос в SELECT мы используем в том случае, когда нам нужно добавить какое-то значение для всей колонки. Но вообще использование подзапросов в SELECT очень редкая практика, ведь чаще такую задачу закрывает просто использование JOIN.

Если мы попробуем решить эту задачу через JOIN, то получится вот так:

with cte as (
select
    club,
    avg(overall) as avg_overall
from
    fifa_players_2018
group by
    club
order by
    avg_overall desc
limit 1
	)


select
    players.club,
    short_name,
    overall,
    avg_overall
from
    fifa_players_2018 as players
join cte on cte.club = players.club
order by
    overall desc
limit 5

Еще подзапрос в SELECT мы можем использовать в конструкции CASE WHEN, но подробно об этом говорить не будем, потому что тут работают те же правила, что и для WHERE.