Еще в SELECT подзапрос можно использовать в качестве коррелированного.
Коррелированный подзапрос - это подзапрос, который обращается к данным из внешнего запроса. Главное его отличие от обычного подзапроса в том, что он выполняется для каждой строки основного запроса.
select
player.short_name,
player.club,
player.overall,
(select avg(overall)
from fifa_players_2018 sub
where sub.club = player.club) as avg_club_rating
from
fifa_players_2018 player
order by
player.overall desc
limit 5
В этом запросе для каждого игрока мы вычисляем средний рейтинг его клуба. Обратите внимание на условие WHERE
sub.club = player.club
- здесь подзапрос использует значение club
из внешнего запроса, что и делает его коррелированным.
Важно помнить, что такие подзапросы могут работать медленнее обычных, так как выполняются для каждой строки отдельно. В большинстве случаев их можно заменить на JOIN
для лучшей производительности.