WikiFree Editorial

Free SQL for Reporting Learning Path

Learn sql for reporting with free resources, original exercises and a practical final project. A trustworthy query starts with the row.

Free SQL for Reporting Learning Path. The query bench. Original diagram of the path training case.

WikiFree learning path 24 · Beginner

The query bench

A trustworthy query starts with the row.

Create a SQLite reporting database, join customers to orders and produce a reconciled paid-sales report including customers with no paid orders.

Teaching illustration for SQL for Reporting. The baseline paid total is 300: North 220, South 80 and West 0. A correct customer LEFT JOIN retains C4 with count 0 and value 0. Adding paid order O7 for 20 changes only West and the grand total, now 320.
Original learning case · The query bench. The data and scenarios are supplied for practice.
1 source coursePublished on WikiFree
2 selected videosOnly the assigned material
5 practical stagesOne cumulative project
~13h 44mIncludes practice and capstone

Video duration uses the selected lessons only. Reading and practice times are planning estimates; repeat difficult work as needed.

A clear starting point

Who this is for

Basic spreadsheet tables and arithmetic. A local SQLite-compatible editor; no server subscription.

Your practical result

Create a SQLite reporting database, join customers to orders and produce a reconciled paid-sales report including customers with no paid orders.

This is a small relational reporting project, not database administration, query tuning or complete SQL Server Reporting Services training.

Access and cost

Public videos and SQLite are free. Install an official SQLite distribution or use a SQLite editor you already trust. SQL Server tools shown in the provider videos are optional; the supplied project uses SQLite.

The project pack contains an original workbook, case inputs, an evidence log and reference notes. Some technical paths include starter code and a runnable reference. Read the pack README before starting.

Three-minute readiness check

Answer first, then open each explanation. A missed answer identifies what to revisit; it does not stop you from starting.

What identifies a row?

A declared key, such as order_id.

Will a join always preserve the number of rows?

No. Non-unique matches can multiply rows.

Is a pending order paid revenue here?

No. The reporting rule includes only status paid.

The case you will work on

The fictional Harbor Workshop sells classes. Customer IDs C1 and C3 belong to North, C2 to South and C4 to West. The order amounts below are original synthetic data.

OrderCustomerStatusAmount
O1C1paid100
O2C1paid50
O3C2paid80
O4C2refunded40
O5C3paid70
O6C3pending60

These are supplied synthetic inputs, not observations from a real organization. Label assumptions and any additional data you create.

Keep an evidence trail

Save each stage output in the project folder. In evidence_log.csv, record the decision, the artifact or test that supports it, what failed, and the revision you made.

Your route from learning to evidence

  1. Stage 1Define tables and keysA runnable database with four customers and six orders.80 minutes of original practice
  2. Stage 2Filter the reporting populationA paid-order detail query.65 minutes of original practice
  3. Stage 3Join without multiplying valueA checked paid-order join.75 minutes of original practice
  4. Stage 4Include customers with zero salesA zero-inclusive customer and region report.80 minutes of original practice
  5. Stage 5Make the report repeatableA report package with a refresh check.60 minutes of original practice
  6. Final projectMake the evidence reviewableConnect the five stage outputs and test a change.210 minutes estimated
0 of 6 evidence checks complete

Progress stays in this browser. Tick a stage only after its evidence check passes. This is a personal checklist, not a certificate.

Why these source courses

The path uses selected material from courses already published on WikiFree. The original exercises below connect that material to one practical outcome. Follow only the listed assignments; completing the full source courses is optional.

Learn it, apply it, check it

Work in order. Every stage produces something the next stage uses. Revisit the repair instruction when a check fails.

01

Define tables and keys

Basic spreadsheet tables and arithmetic. A local SQLite-compatible editor; no server subscription.

The idea to use

Separate customers from orders because one customer may place many orders. Define the row grain before the columns: one row per customer, one row per order. A primary key rejects repeated IDs, while a foreign key describes a valid relationship. The companion SQL uses SQLite; the provider explains general SQL and may demonstrate different software or dialect syntax.

Watch the selected lessons

Selected video time: 1h 29m. Open this course on WikiFree.

Your 80-minute lab

Create customers and orders tables using the supplied setup file. Inspect row counts and list the two grains.

Save: A runnable database with four customers and six orders..

Evidence check

Customer and order IDs are unique; counts are 4 and 6.

If it fails: Do not combine repeated customer attributes into an unexplained duplicate customer table.

02

Filter the reporting population

Bring your previous output: A runnable database with four customers and six orders.

The idea to use

A WHERE condition defines which rows enter the report. Use the business rule explicitly rather than assuming every order is complete. Start by inspecting the filtered rows before aggregating. For this case, paid orders are O1, O2, O3 and O5. Sorting makes manual comparison easier, but it does not change which rows qualify.

Watch the selected lessons

Selected video time: 2h 45m. Open this course on WikiFree.

Your 65-minute lab

Select order ID, customer ID and amount for paid orders, ordered by order ID. Compute their independent total.

Save: A paid-order detail query..

Evidence check

Four rows remain and their amounts sum to 300.

If it fails: If the total is 400, pending and refunded orders have leaked into the result.

03

Join without multiplying value

Bring your previous output: A paid-order detail query.

The idea to use

Join each order to exactly one customer using customer_id. Check the detail row count before and after the join; a larger count can signal duplicate dimension keys or an incorrect condition. An inner join is appropriate for inspecting valid paid-order detail, but it omits customers with no matching order and therefore cannot answer every customer-coverage question.

Original practice stage. No additional video or reading assignment is required.

Your 75-minute lab

Join paid orders to customer regions. Confirm each order appears once and reconcile total value to the earlier query.

Save: A checked paid-order join..

Evidence check

Four joined rows total 300, with North 220 and South 80.

If it fails: Repair the join keys before adding DISTINCT, which can hide a modeling error.

04

Include customers with zero sales

Bring your previous output: A checked paid-order join.

The idea to use

A LEFT JOIN preserves every customer. Put the paid-status condition in the join condition when retaining customers with no paid orders; a WHERE condition on the order side can remove their null-extended rows. Use COALESCE on the sum to display zero, and COUNT(order_id) rather than COUNT(*) to count actual matches.

Original practice stage. No additional video or reading assignment is required.

Your 80-minute lab

Write a customer report with paid count and paid amount, including C4. Then aggregate to region.

Save: A zero-inclusive customer and region report..

Evidence check

C1=150/2 orders; C2=80/1; C3=70/1; C4=0/0; total remains 300.

If it fails: If C4 disappears, examine the placement of the paid-status condition.

05

Make the report repeatable

Bring your previous output: A zero-inclusive customer and region report.

The idea to use

A report handover needs the query, metric definition, source setup and expected checks. A saved result without its logic is difficult to refresh reliably. Explain how a new row affects totals and how missing or duplicate keys should be handled. Use a transaction or a fresh copy when testing changes so the baseline remains reproducible.

Original practice stage. No additional video or reading assignment is required.

Your 60-minute lab

Add test order O7 for C4, paid amount 20, in a copy. Rerun the report and document the changed total and zero-sales count.

Save: A report package with a refresh check..

Evidence check

The test total becomes 320 and no customer remains at zero paid sales.

If it fails: If a refresh changes unrelated rows, rebuild from the clean setup and inspect the update steps.

A worked reference to compare

The baseline paid total is 300: North 220, South 80 and West 0. A correct customer LEFT JOIN retains C4 with count 0 and value 0. Adding paid order O7 for 20 changes only West and the grand total, now 320.

Compare your reasoning as well as the result. If your answer differs, state the assumption or input that explains the difference. Reference notes are for checking after an attempt; copying them is not evidence of independent work.

Your final project

Your brief

Submit schema, seed data, detail and summary queries, expected results and a README. Demonstrate duplicate-ID rejection and the O7 refresh scenario. A reviewer must be able to recreate the database from scratch.

Time box: 3h 30m estimated. Extend it if a gate needs repair.

Hand in these artifacts

  • A runnable database with four customers and six orders.
  • A paid-order detail query.
  • A checked paid-order join.
  • A zero-inclusive customer and region report.
  • A report package with a refresh check.
  • A short README: outcome, how to inspect or run the work, assumptions and limitations.
  • A before-and-after change test and the completed evidence log.

Run a final review

  1. Use the supplied reference to reconcile the baseline result.
  2. Choose one relevant input or constraint to change. Write your expected effect before testing it.
  3. Run the calculation, walkthrough or test again and save the actual result.
  4. Ask a peer to inspect the evidence, or perform a separate self-review. Label which review you used.
  5. Score the work using the rubric and repair every critical failure.

Review rubric · 100 points

CriterionPointsEvidence to inspect
Practical outcome and case reasoning25Create a SQLite reporting database, join customers to orders and produce a reconciled paid-sales report including customers with no paid orders.
Five stage checks30Award 6 points for each stage only when its stated gate is demonstrably met.
Traceable evidence20Artifacts, inputs and calculations or tests are reproducible; synthetic and simulated evidence is labelled.
Revision after a changed condition15Change one input or constraint, predict the effect, test it and record the result.
Handoff quality10A reviewer can find the files, follow the instructions and understand the remaining limitations.

Completion target: at least 80/100, all five stage gates passed, and every critical issue below corrected. This is a learning benchmark, not an accredited qualification.

Critical issue: The paid total reconciles and the zero-order customer is retained without counting a phantom order.

Before you go further

What will I be able to produce?

Create a SQLite reporting database, join customers to orders and produce a reconciled paid-sales report including customers with no paid orders.

Is the whole path free?

Public videos and SQLite are free. Install an official SQLite distribution or use a SQLite editor you already trust. SQL Server tools shown in the provider videos are optional; the supplied project uses SQLite.

Do I need to finish every source course?

No. Follow the selected assignments at each stage. Source courses provide context, while the original case, labs and final review build the practical result. Extra study is optional.

What counts as completion?

Complete all five stage checks, earn at least 80/100 on the final rubric and correct every critical issue. This is a small relational reporting project, not database administration, query tuning or complete SQL Server Reporting Services training.

Reviewed 2026-10-12. Published source listings and assigned lesson metadata were checked on that date. Availability, account requirements and software interfaces may change.

Time budget: 4h 14m selected video + 0m estimated reading + 9h 30m original practice and final project.

Video duration uses the selected lessons only. Reading and practice times are planning estimates; repeat difficult work as needed.

Official reference: SQLite SELECT documentation

Original WikiFree learning design and project materials. Provider lessons remain on their original platforms. No provider endorsement or certificate is implied.

Share this article

Questions & discussion

Share a useful question or correction. Comments appear after moderation. Please avoid personal or sensitive information.

Add to the discussion

Your email address will not be published. Required fields are marked *