How do I get a column that is the sum of all the values before of another column?
As of SQLite 3.25.0, since 2018-09-15, window functions and their keyword OVER
are supported. The answer to your question is now easy:
SELECT Country, Gdp, SUM(Gdp) OVER (ROWS UNBOUNDED PRECEDING)
FROM CountryGdp;
This is the minimal query that does what you request, but it doesn't define any ordering so here is a more proper way of doing it.
SELECT
Country,
Gdp,
SUM(Gdp) OVER (
ORDER BY Country -- Window ordering (not necessarily the same as result ordering!)
ROWS BETWEEN -- Window for the SUM includes these rows:
UNBOUNDED PRECEDING -- all rows before current one in window ordering
AND CURRENT ROW -- up to and including current row.
) AS RunningTotal
FROM CountryGdp
ORDER BY Country;
In any way, the query should run in O(N) time.