SQL ROW_NUMBER

Assigns a unique, ever-increasing number to each row — never repeats, even when values tie.

What & Why

ROW_NUMBER numbers rows 1, 2, 3, and so on inside the window, even when ordered values tie. It gives every row one stable position for pagination, deduplication, and outer-query filtering.

See How It Works

BUSINESS QUESTION

Number campaigns from highest to lowest spend.

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 ROW_NUMBER assign one unique campaign positionStep 1 of 4
ROW_NUMBER() OVER (ORDER BY spend DESC, id)
campaign_idnamechannelspendrow_number
4Enterprise Searchgoogle_ads60,000.001
1Spring Launchgoogle_ads55,000.002
3Finance Retargetinglinkedin50,000.003
2Retention Webinaremail45,000.004

Enterprise Search receives the first position as the highest spend.

EXAMPLE QUERY
SELECT
  id AS campaign_id,
  name,
  channel,
  spend,
  ROW_NUMBER() OVER (ORDER BY spend DESC, id) AS row_number
FROM marketing.campaigns
ORDER BY row_number;

This lesson's practice is part of Pro.

Advanced business practice

Sign up free to try it on a real business scenario