lesson 11 Calculations & data quality · intermediate
Group into summaries
Summarize rows that share the same group.
the idea
GROUP BY forms one group for each key. Aggregates then summarize each group. Select grouping columns and aggregates to avoid ambiguous output.
tables in this lesson
The challenges use this data. Each column shows its type underneath; → marks a link to another table.
products4 columns · 6 rows
| idinteger · key | nametext | categorytext | pricereal |
|---|---|---|---|
| 1 | Notebook | Stationery | 12 |
| 2 | Desk lamp | Home | 45 |
| 3 | Keyboard | Tech | 80 |
| 4 | Pen set | Stationery | 8 |
| 5 | Headphones | Tech | 120 |
showing 5 of 6 rows
orders6 columns · 12 rows
| idinteger · key | customer_idinteger | product_idinteger | quantityinteger | statustext | ordered_attext |
|---|---|---|---|---|---|
| 101 | 1 | 1 | 2 | paid | 2025-01-01 |
| 102 | 2 | 3 | 1 | paid | 2025-01-02 |
| 103 | 1 | 2 | 1 | paid | 2025-01-05 |
| 104 | 3 | 5 | 2 | pending | 2025-01-08 |
| 105 | 4 | 4 | 5 | paid | 2025-02-01 |
showing 5 of 12 rows
example
The idea in one query. Press Run to see what it returns; running examples never affects your progress.
SELECT category, COUNT(*) AS product_count FROM products GROUP BY category;
Watch for: Selecting an ungrouped name in SQLite can return an arbitrary member of the group.
build it step by step
Each step changes one thing. Run them in order and watch the result change.
Read product rows. Two products belong to each category. The input grain is one product.
step-1.sqlSELECT id,name,category FROM products;
Count within groups. GROUP BY changes the grain to one category.
step-2.sqlSELECT category,COUNT(*) AS product_count FROM products GROUP BY category;