CodingNeed.

Engineering practice · 25 MIN

Make running totals deterministic

Specify the window frame instead of relying on a default.

A running total needs both an order and a frame. ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW accumulates physical rows in the chosen order. A unique id breaks ties. Default RANGE frames may include all peers at once, which surprises readers when sort values tie. Treat a null amount as zero only when that matches the business contract.

Treat the function as a small service: define a contract, maintain an invariant, and test the boundaries.

Read the example

SELECT id, COALESCE(amount,0) FROM sales ORDER BY id;
Check the expected output
[[1,10],[2,10],[3,5],[4,8],[5,0]]

Your challenge

Return id, customer, running_total within each customer, ordered by id. Accumulate amounts by ascending id; null contributes zero.

Solution cost: Typically O(n log n), or closer to O(n) with suitable ordered access; verify the plan. time · Engine dependent, up to O(n) sort workspace. space

Common trap

A global window mixes totals from different customers.

Further reading: SQLite window frames

Next lesson: Project · Paginate a changing activity feed →

Essential cookies keep your account signed in. Optional analytics is not configured on this site. Your choice does not affect access to lessons.

Read the Privacy Policy. You can change this choice in the footer.