SQL MIN OVER
The smallest value in the window, attached to every row — useful for 'how far above the floor am I.'
What & Why
MIN(column) OVER (PARTITION BY ...) finds each partition's smallest value and repeats it on every row in that group.
See How It Works
BUSINESS QUESTION
Marketing wants each campaign beside the minimum spend in its channel.
| id | name | channel | spend | start_date | end_date | status | target_segment |
|---|---|---|---|---|---|---|---|
| 1 | Spring Launch | google_ads | 55000.00 | 2024-01-15 | 2024-03-31 | active | smb |
| 2 | Retention Webinar | 45000.00 | 2024-02-10 | 2024-04-15 | active | enterprise | |
| 3 | Finance Retargeting | 50000.00 | 2024-03-12 | 2024-05-31 | active | enterprise | |
| 4 | Enterprise Search | google_ads | 60000.00 | 2024-04-01 | 2024-06-30 | active | enterprise |
EXAMPLE QUERY
SELECT
id AS campaign_id,
channel,
spend,
MIN(spend) OVER (PARTITION BY channel) AS channel_min_spend
FROM marketing.campaigns
ORDER BY channel, campaign_id;RESULT — channel minimum beside campaigns
| campaign_id | channel | spend | channel_min_spend |
|---|---|---|---|
| 2 | 45000.00 | 45000.00 | |
| 1 | google_ads | 55000.00 | 55000.00 |
| 4 | google_ads | 60000.00 | 55000.00 |
| 3 | 50000.00 | 50000.00 |
MIN OVER uses the lowest spend in each channel partition.
This lesson's practice is part of Pro.
Sign up free to try it on a real business scenario