lesson 10 Calculations & data quality · intermediate
COUNT, SUM & AVG
Count rows and calculate totals and averages.
the idea
Aggregate functions collapse rows into a summary. COUNT(*) counts rows; COUNT(column) excludes NULL. SUM adds numeric values; AVG finds their mean.
tables in this lesson
The challenges use this data. Each column shows its type underneath; → marks a link to another table.
customers4 columns · 8 rows
| idinteger · key | nametext | citytext | joined_attext |
|---|---|---|---|
| 1 | Alice | Chicago | 2024-01-10 |
| 2 | Ben | Austin | 2024-02-12 |
| 3 | Cara | Seattle | 2024-03-05 |
| 4 | Dev | Chicago | 2024-04-20 |
| 5 | Elena | NULL | 2024-05-01 |
showing 5 of 8 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 COUNT(*) AS customer_count FROM customers;
Watch for: COUNT(city) excludes Elena because her city is NULL.
build it step by step
Each step changes one thing. Run them in order and watch the result change.
Look at the rows being counted. Each customer is one row. An aggregate without GROUP BY collapses the whole table into one summary.
step-1.sqlSELECT id, name FROM customers;
Collapse to a single count. COUNT(*) counts rows. SUM and AVG work the same way: many input rows become one summary value.
step-2.sqlSELECT COUNT(*) AS customer_count FROM customers;