Unit 01.04: Writing the evidence note
Unit ID: SQL-M01-U05 - Estimated active time: 12-15 minutes Objective: produce a short, reviewable note that lets someone else trust or challenge your number.
A number without a note is not evidence
"Revenue was ₹26.9L last month" is a claim. It becomes evidence when a reader can check it. A good note is short - five lines - and answers the questions a reviewer would ask.
The five-line format
Question: What was total revenue in June 2026?
Source: orders table, placed_at >= 2026-06-01 and < 2026-07-01, status = 'completed'
Grain: one row per order (verified: 1,000 rows in, 988 completed rows out)
Result: ₹26,85,905 across 988 completed orders
Limitation: excludes 12 orders still in 'pending'; refunds not deducted
The limitation line is the one people skip and the one reviewers value most.
Worked example
SELECT
COUNT(*) AS orders,
SUM(order_total) AS revenue
FROM orders
WHERE placed_at >= '2026-06-01'
AND placed_at < '2026-07-01'
AND status = 'completed';
Note the >= / < date pattern rather than BETWEEN. BETWEEN '2026-06-01' AND '2026-06-30' silently drops orders placed on the 30th after midnight if placed_at is a timestamp. That is exactly the kind of detail the evidence note exists to surface.
Practice
Take any query you wrote in this module and produce its five-line note. Then hand it to someone and ask them to find one thing they cannot verify from the note alone. Add that thing.
Takeaway
Finish every analysis by writing what you checked and what you could not. The habit costs two minutes and is the difference between an analyst people trust and one they double-check.
---
Module 01 Knowledge Check
Ten questions. Pass mark 8/10. Retry after reviewing feedback.
1. orders has 1,000 rows and order_items has 3,400. After orders JOIN order_items ON order_id, how many rows?
- A. 1,000
- B. 3,400 ✅
- C. 4,400
- D. 3,400,000
*The join lifts the result to the order-item grain - one row per item.*
2. What does "grain" mean?
- A. How much storage a table uses
- B. What one row represents ✅
- C. The primary key data type
- D. The number of columns
3. SELECT COUNT(*) FROM tests; returns 10 and SELECT COUNT(score) FROM tests; returns 8. Why?
- A. Two rows were deleted
- B. Two
scorevalues are NULL ✅ - C.
COUNT(*)is unreliable - D. Two scores are zero
*Aggregates skip NULL. COUNT(*) counts rows; COUNT(col) counts non-null values.*
4. WHERE country <> 'IN' - which rows are excluded that a reader might not expect?
- A. Rows where country = 'IN'
- B. Rows where country is NULL ✅
- C. Rows where country is lowercase
- D. None
5. Which fixes join fan-out while keeping item counts?
- A. Add
DISTINCTto the SELECT - B. Aggregate
order_itemsto one row per order, then join ✅ - C. Use
RIGHT JOIN - D. Add
LIMIT
6. A manager asks for "average order value". You have order_items with a price column. AVG(price) gives you…
- A. The correct answer
- B. The average line price, not the average order value ✅
- C. The median
- D. An error
7. orphan_orders returns 47 from a LEFT JOIN null-check. What does that mean?
- A. 47 orders reference a customer that does not exist ✅
- B. 47 customers have no orders
- C. The join is written incorrectly
- D. 47 rows are duplicated
8. Why prefer placed_at >= '2026-06-01' AND placed_at < '2026-07-01' over BETWEEN?
- A. It is faster
- B.
BETWEENcan drop same-day timestamps after midnight ✅ - C.
BETWEENdoes not work on dates - D. It uses less memory
9. Which relationship shape leaves the row count unchanged when joined?
- A. one-to-many
- B. many-to-many
- C. one-to-one ✅
- D. All of them
10. Which belongs in an evidence note but is most often omitted?
- A. The result
- B. The limitation ✅
- C. The question
- D. The table name
Applied checkpoint
Using any database you can access (or the sample schema above), produce:
- A grain statement for two related tables.
- A row-count check before and after joining them.
- One query whose result changes depending on how you treat NULL, with both versions and a one-line
justification for the version you would report.
- A five-line evidence note for that result.
Meets standard when: the grain statements are specific, the row-count check is present, the NULL decision is justified rather than assumed, and the note names at least one real limitation.
