Reported March 2026
Notion

Percentage of Blocks Never Edited

Reported by candidates from Notion's online assessment. Pattern, common pitfall, and the honest play if you blank under the timer.

Get StealthCoderRuns invisibly during the live Notion OA. Under 2s to a working solution.
Founder's read

The Notion OA reported in March 2026 has a SQL question that looks like a percentage problem but hinges on one thing: the relationship between blocks and block_edits. One block can have many edit rows, and that's the trap. If you count rows in the wrong table, your number is off. It's a short query once you see it. Know the join shape and the rounding before you sit down. StealthCoder is there as a safety net on the live OA if your mind goes blank, but this one is quick to nail down by hand.

The problem

Given all blocks and their edit history, return the percentage of distinct blocks that have no edit record.
Round the percentage to two decimal places and return one row with the column never_edited_percentage.

Tables
blocks: block_id PK (Integer), created_at (Timestamp)
block_edits: edit_id PK (Integer), block_id (Integer), edited_at (Timestamp)

Constraints
At least one block is present.
A block with any number of edit rows counts as edited once.
The percentage is 100 × unedited blocks / all blocks.

Reported by candidates. Source: FastPrep

Pattern and pitfall

The data structure that matters is the one-to-many link from blocks to block_edits. You want distinct blocks with zero edit rows, divided by all blocks. Cleanest route: LEFT JOIN blocks to block_edits on block_id, then count blocks where the edits side is NULL. Or use NOT EXISTS, which avoids duplicate rows from multiple edits. Then compute 100.0 * unedited / total and ROUND(..., 2), aliased as never_edited_percentage. Pitfalls: integer division returning 0, so multiply by 100.0 first. Counting join rows instead of distinct block_id inflates the denominator for edited blocks. The constraint says at least one block exists, so division by zero isn't a concern. If you blank on the live OA, StealthCoder can give you the NOT EXISTS version fast, but the logic is simple enough to own.

If you see this problem in your OA tomorrow, the play is to recognize the pattern in 30 seconds. StealthCoder buys you that recognition.

If this hits your live OA

You can drill Percentage of Blocks Never Edited cold, or you can hedge it. StealthCoder runs invisibly during screen share and surfaces a working solution in under 2 seconds. The proctor sees the IDE. They don't see what's behind it. Built by an Amazon engineer who passed his OA cold and still thinks the filter is broken.

Get StealthCoder

Related leaked OAs

⏵ The honest play

You've seen the question. Make sure you actually pass Notion's OA.

Notion reuses patterns across OAs. Built by an Amazon engineer who passed his OA cold and still thinks the filter is broken. Works on HackerRank, CodeSignal, CoderPad, and Karat.

Percentage of Blocks Never Edited FAQ

What's the trick in the Notion never-edited percentage question?+

Blocks can have many edit rows, so a plain join duplicates blocks. Count distinct block_id or use NOT EXISTS against block_edits. Then divide unedited by total blocks, multiply by 100.0, and round to two decimals.

Should I use LEFT JOIN or NOT EXISTS?+

Either works. LEFT JOIN with a NULL check on the edits side finds unedited blocks, but you must count distinct block_id for the total. NOT EXISTS is safer because it never multiplies rows, so the denominator stays simple.

Why does my result come back as 0 or 100?+

Probably integer division. If both counts are integers, the engine may truncate. Multiply by 100.0 before dividing, or cast one side to decimal. Then wrap the whole expression in ROUND(..., 2) to match the required format.

How hard is this really?+

Easy to medium. There's no window function or grouping needed. The only real risks are duplicate rows from the join, integer division, and forgetting the exact column name never_edited_percentage in the output.

How do I prepare in 48 hours?+

Write the query twice from scratch: once with LEFT JOIN and IS NULL, once with NOT EXISTS. Check both against a block with three edits and a block with none. Practice the rounding and alias so nothing trips you on the day.

Problem reported by candidates from a real Online Assessment. Sourced from a publicly-available candidate-aggregated repository. Not affiliated with Notion.

OA at Notion?
Invisible during screen share
Get it