Contents

Data, SQL and Getting to the Answer

Lesson 11 of 66. Sign in to keep your place.

Module 1 · Tables, types and the question you are actually asking

A right number and a useful number are not the same

9 min read

Four correct answers to “how many active users do we have?”Opened the app once, ever380000Signed in during the last30 days41200Took an action in the last30 days12400Has a live subscription6900accounts answering to the word “active”Every one of these is produced by a query with no bug in it. The number that gets reported is decidedby a definition nobody wrote down, and the gap between the largest and the smallest is a factor offifty-five. Send the sentence before you send the number.
Every one of these is produced by a query with no bug in it. The number that gets reported is decided by a definition nobody wrote down, and the gap between the largest and the smallest is a factor of fifty-five. Send the sentence before you send the number.

Figure

The query was correct. The answer was wrong.

This is the lesson that separates people who can write SQL from people you can trust with a decision. Your query can be flawless (correct joins, correct filters, no NULL traps) and still produce a number that misleads everyone in the room.

Here is the shape of it, four ways.

The definition nobody agreed on

“How many active users do we have?” You write the query. You return 41,200.

But nobody said what active means. Signed in during the last 30 days? Took any action at all? Has a live subscription? Opened the app once, ever, and never deleted the account? Those four numbers might be 41,200 and 12,400 and 6,900 and 380,000. All four are correct. Three of them will get someone fired.

The fix is not technical. Before the query, write the sentence: ”one row of my result is one account that performed at least one action between 1 and 31 March, in the account’s own time zone.” Send that sentence to whoever asked, before you send them a number.

The denominator that moved

A team reports that conversion rate rose from 2.1% to 3.4% after a redesign. The numerator query is correct. The denominator query is correct. What happened is that an analytics script broke on mobile, so a third of the visits stopped being recorded. Fewer visits, same purchases, higher rate.

Whenever a ratio moves, look at the top and the bottom separately. A ratio hides which half changed, and it is very often the half you were not thinking about.

Survivorship

A subscription business computes churn as: of the customers currently in the customers table, what share have status 'cancelled'. It returns 4%.

The problem is that customers who cancelled and were then purged, or archived, or moved to another table, are not in the denominator at all. You are measuring churn among the people who did not leave. Adding a date filter does not help; the missing people are missing before any filter runs.

The general form: whenever your population is defined by having survived, you cannot use it to measure survival.

The average that lands where nobody is

Mean order value on an Indian marketplace: ₹4,800. Ninety percent of orders are between ₹300 and ₹900. A handful of bulk business orders are ₹200,000 each. The mean is arithmetically perfect and describes no customer who has ever existed.

Report the median. Report the 90th percentile next to it. If the median is ₹620 and the mean is ₹4,800, that gap is itself the finding, and it is more interesting than either number alone.

Time zones and late data, briefly

“Yesterday’s revenue” computed in UTC for a business in Asia/Kolkata moves the boundary by five and a half hours, which reliably shifts the evening rush into the wrong day. And today’s number is always low, because payments settle, webhooks retry and refunds land days later. A dashboard whose last bar always dips has taught its whole company that things are getting worse.

What to do about all of this

Say the sentence first. “One row of my result is ____, counted over ____, between ____ and ____ in ____ time zone, excluding ____.” If any blank is unfillable, go and ask.

Check the number against something you already know. Last month’s figure. A total from the finance system. Ten rows counted by hand. A number with nothing to compare it against is a number nobody can challenge, including you.

Try to break your own filter. Change a condition so the result should move. If it does not move, your filter is not doing anything, and you have found that out for free instead of in a meeting.

Ship the query with the number. Always. A figure in a message with no query behind it cannot be argued with, and things that cannot be argued with are how organisations end up confidently wrong for a year.

Every lesson here is open. Your progress is recorded once you pass the Building Apps with AI exam.

Check your understanding

A subscription business calculates churn as: of the customers currently in the customers table, what share have status ‘cancelled’. The SQL is correct and returns 4%. Why might 4% be the wrong answer to “what is our churn rate”?

Pick the one you would defend. Your answer stays private.

Next lesson · 8 minAsking an AI for SQL without being lied to

Stuck on something?Ask Divya, your AI tutor

How to cite: Addaly (2026) ‘A right number and a useful number are not the same’, in Data, SQL and Getting to the Answer. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/data-and-sql/right-vs-useful (Accessed: 31 October 2026).