Learn SQL/Advanced/Subqueries/SQL Correlated Subquery

SQL Correlated Subquery

A subquery that re-runs once per outer row — because it references that row.

What & Why

A correlated subquery references a column from the outer query inside its own WHERE clause. That reference means it can't run once and be done — it re-evaluates separately for every single row the outer query considers.

See How It Works

BUSINESS QUESTION

Find campaigns whose spend is above the average for their own channel.

idnamechannelspendstart_dateend_datestatustarget_segment
1Spring Launchgoogle_ads55000.002024-01-152024-03-31activesmb
2Retention Webinaremail45000.002024-02-102024-04-15activeenterprise
3Finance Retargetinglinkedin50000.002024-03-122024-05-31activeenterprise
4Enterprise Searchgoogle_ads60000.002024-04-012024-06-30activeenterprise
Watch the peer average follow each campaign's channelStep 1 of 4
peer.channel = current_campaign.channel
namechannelspendchannel_avgdecision
Spring Launchgoogle_ads55,000.0057,500.00SKIP
Retention Webinaremail45,000.0045,000.00SKIP
Finance Retargetinglinkedin50,000.0050,000.00SKIP
Enterprise Searchgoogle_ads60,000.0057,500.00KEEP

Spring Launch is below the average of its two google_ads peers.

EXAMPLE QUERY
SELECT
  c.name,
  c.channel,
  c.spend
FROM marketing.campaigns c
WHERE c.spend > (
  SELECT AVG(peer.spend)
  FROM marketing.campaigns peer
  WHERE peer.channel = c.channel
)
ORDER BY c.channel, c.spend DESC;

This lesson's practice is part of Pro.

Advanced business practice

Sign up free to try it on a real business scenario