lesson 12 Calculations & data quality · beginner
MIN, MAX & the grain of a result
Find extremes and define what each output row represents.
the idea
MIN and MAX summarize the smallest and largest values. The grain describes what one output row means. Adding GROUP BY changes that grain from one overall row to one row per group.
tables in this lesson
The challenges use this data. Each column shows its type underneath; → marks a link to another table.
watch_events5 columns · 26 rows
| idinteger · key | viewer_idinteger | video_idinteger | watched_attext | watch_secondsinteger |
|---|---|---|---|---|
| 1 | 1 | 1 | 2025-01-01 10:00:00 | 300 |
| 2 | 1 | 2 | 2025-01-01 11:00:00 | 450 |
| 3 | 2 | 1 | 2025-01-02 12:00:00 | 600 |
| 4 | 3 | 3 | 2025-01-02 13:00:00 | 120 |
| 5 | 1 | 4 | 2025-01-02 14:00:00 | 700 |
showing 5 of 26 rows
example
The idea in one query. Press Run to see what it returns; running examples never affects your progress.
SELECT MIN(watch_seconds) AS shortest_watch, MAX(watch_seconds) AS longest_watch FROM watch_events;
Watch for: A maximum value alone does not identify every other column from that row.
build it step by step
Each step changes one thing. Run them in order and watch the result change.
Scan the watch lengths. Each event has watch_seconds. One overall MIN/MAX summarizes the whole table; GROUP BY later changes the grain.
step-1.sqlSELECT id, video_id, watch_seconds FROM watch_events ORDER BY id LIMIT 10;
Summarize at the overall grain. Without GROUP BY, MIN and MAX return one row for the entire result. That grain is “the whole table.”
step-2.sqlSELECT MIN(watch_seconds) AS shortest_watch, MAX(watch_seconds) AS longest_watch FROM watch_events;