Reporting Queries
Grouped Report
Sales by Region
GROUP BY turns detail rows into report rows. A parameter CTE can choose which region to show in the report.
Program
Play the script to choose a region and see its grouped sales total and order count.
region_sales_report.sql
Replay: real traced execution (multi-file project)
CREATE TABLE sales (order_id INTEGER, region TEXT, amount INTEGER);
INSERT INTO sales VALUES (1, 'West', 120), (2, 'East', 90), (3, 'West', 80), (4, 'East', 160);
WITH params(wanted_region) AS (VALUES ('West')) SELECT region, SUM(amount) AS total_sales, COUNT(*) AS order_count FROM sales WHERE region = (SELECT wanted_region FROM params) GROUP BY region;
CREATE TABLE sales (order_id INTEGER, region TEXT, amount INTEGER);
INSERT INTO sales VALUES (1, 'West', 120), (2, 'East', 90), (3, 'West', 80), (4, 'East', 160);
WITH params(wanted_region) AS (VALUES ('East')) SELECT region, SUM(amount) AS total_sales, COUNT(*) AS order_count FROM sales WHERE region = (SELECT wanted_region FROM params) GROUP BY region;
tables ← 1 row
1CREATE TABLE sales (order_id INTEGER, region TEXT, amount INTEGER);2INSERT INTO sales VALUES (1, 'West', 120), (2, 'East', 90), (3, 'West', 80), (4, 'East', 160);values this step1 rowtablessales ← 4 rows
1CREATE TABLE sales (order_id INTEGER, region TEXT, amount INTEGER);2INSERT INTO sales VALUES (1, 'West', 120), (2, 'East', 90), (3, 'West', 80), (4, 'East', 160);3WITH params(wanted_region) AS (VALUES ('West')) SELECT region, SUM(amount) AS total_sales, COUNT(*) AS order_count FROM sales WHERE region = (SELECT wanted_region FROM params) GROUP BY region;values this step4 rowssalesresult ← 1 row
2INSERT INTO sales VALUES (1, 'West', 120), (2, 'East', 90), (3, 'West', 80), (4, 'East', 160);3WITH params(wanted_region) AS (VALUES ('West')) SELECT region, SUM(amount) AS total_sales, COUNT(*) AS order_count FROM sales WHERE region = (SELECT wanted_region FROM params) GROUP BY region;values this step1 rowresult
tables ← 1 row
1CREATE TABLE sales (order_id INTEGER, region TEXT, amount INTEGER);2INSERT INTO sales VALUES (1, 'West', 120), (2, 'East', 90), (3, 'West', 80), (4, 'East', 160);values this step1 rowtablessales ← 4 rows
1CREATE TABLE sales (order_id INTEGER, region TEXT, amount INTEGER);2INSERT INTO sales VALUES (1, 'West', 120), (2, 'East', 90), (3, 'West', 80), (4, 'East', 160);3WITH params(wanted_region) AS (VALUES ('East')) SELECT region, SUM(amount) AS total_sales, COUNT(*) AS order_count FROM sales WHERE region = (SELECT wanted_region FROM params) GROUP BY region;values this step4 rowssalesresult ← 1 row
2INSERT INTO sales VALUES (1, 'West', 120), (2, 'East', 90), (3, 'West', 80), (4, 'East', 160);3WITH params(wanted_region) AS (VALUES ('East')) SELECT region, SUM(amount) AS total_sales, COUNT(*) AS order_count FROM sales WHERE region = (SELECT wanted_region FROM params) GROUP BY region;values this step1 rowresult
GROUP BY
`GROUP BY region` collapses matching detail rows into one report row per region.
SUM
`SUM(amount)` adds the selected row amounts.
COUNT
`COUNT(*)` counts the selected detail rows.