Lesson 6 — Group by and HAVING

Continue after lesson 5, or start Python in this extracted folder and run:
    exec(open("start-here.py").read())
    exec(open("console.py").read())
    exec(open("checks.py").read())
Requires Python 3.11+ and asqueel[migration]==0.6.0.
The bootstrap rebuilds lessons 1–5. Four fictional CSV files are included.

GROUP BY returns one summary per city. WHERE filters input rows;
HAVING filters aggregated groups. AS is optional and names result columns.
This lesson uses ordinary fetch() only to display the query results.
It writes no report files. Leave the report query in the console for lesson 7,
which covers fetch formats and CSV/JSON export separately.
The model and SQLite database remain in memory. Inputs are unchanged.
SQLite arithmetic is not exact decimal arithmetic; ROUND is used for display.
Commands and results were executed in a real Python REPL; timing is edited.
