如何獲得一列是另一列之前所有值的總和?如何計算SQLite查詢上正在運行的SUM?
8
A
回答
8
您可以通過將表格與自身結合(執行所謂的笛卡爾或cross join)來完成此操作。看下面的例子。
SELECT a.name, a.gdppc, SUM(b.gdppc)
FROM gdppc AS a, gdppc AS b WHERE b.gdppc <= a.gdppc
GROUP BY b.id ORDER BY a.gdppc;
給定一個包含國家及其人均國內生產總值的表,它會給你一個GDP數字的運行總數。
Democratic Republic of Congo|329.645|329.645
Zimbabwe|370.465|700.11
Liberia|385.417|1085.527
Burundi|399.657|1485.184
Eritrea|678.954|2164.138
Niger|711.877|2876.015
Central African Republic|743.945|3619.96
Sierra Leone|781.594|4401.554
Togo|833.803|5235.357
Malawi|867.063|6102.42
Mozambique|932.511|7034.931
...
注意,這可能是一個非常耗費資源的操作,因爲如果一個表有N個元素,將創建N * N個元素的臨時表。我不會在一張大桌子上表演。
-1
你必須做一個總和在您需要的領域....查詢取決於你正在使用的數據庫,Oracle允許你這樣做:
select id, value, sum(value) as partial_sum over (order by id) from table
1
像Diomidis Spinellis交叉連接解決方案的建議已經花了O(N^2)次。如果你可以忍受這些令人費解的代碼,遞歸CTE可以更快地工作。
這產生與他相同的輸出。
WITH RECURSIVE running(id, name, gdppc, rt) AS (
SELECT row1._rowid_, row1.name, row1.gdppc, COALESCE(row1.gdppc,0)
FROM gdppc AS row1
WHERE row1._rowid_ = (
SELECT a._rowid_
FROM gdppc AS a
ORDER BY a.gdppc, a.name, a._rowid_
LIMIT 1)
UNION ALL
SELECT row_n._rowid_, row_n.name, row_n.gdppc, COALESCE(row_n.gdppc,0)+running.rt
FROM gdppc AS row_n INNER JOIN running
ON row_n._rowid_ = (
SELECT a._rowid_
FROM gdppc AS a
WHERE (a.gdppc, a.name, a._rowid_) > (running.gdppc, running.name, running.id)
ORDER BY a.gdppc, a.name, a._rowid_
LIMIT 1))
SELECT running.name, running.gdppc, running.rt
FROM running;
排序和比較照顧重複的,COALESCE
有沒有忽略空值。
如果你有一個好的索引,這應該是O(N log N)。由於SQLite不支持遊標,如果不依賴外部應用程序,O(N)解決方案可能不存在。
相關問題
- 1. 如何在sqlite中計算正在運行的待處理值
- 2. 如何正確計算在PDO查詢
- 3. 如何使用我的查詢在php中運行計算
- 4. 計算聚合運行篩選查詢
- 5. SQL查詢滯後運行計算
- 6. 使用SUM進行計算,查詢不起作用?
- 7. MySQL查詢:SUM計數重複行
- 8. 在sql server上SUM查詢
- 9. 如何在SQL Server中執行sum(a)/ sum(b)查詢?
- 10. SQLite查詢在SQLiteManager上運行,但不在iOS上
- 11. 如何計算高級查詢行
- 12. 如何在EF上運行SQL查詢?
- 13. 在SQL Server中使用dinaymic查詢計算SUM Column Wise
- 14. 如何獲得postgresql中正在運行的查詢的執行計劃?
- 15. 用於計算相同類型元素的SUM的正確SQL查詢
- 16. 在計算列上運行總計
- 17. MySQL查詢計算上週
- 18. 如何返回查詢以計算行數,以及如何計算行數?
- 19. jpa列上的算術運算查詢
- 20. SQLite查詢計劃
- 21. SUM在一個SQL統計查詢
- 22. 如何SUM()從查詢
- 23. SQL:執行統計計算的查詢
- 24. Android快速運行的sqlite查詢
- 25. 運行原始的sqlite查詢
- 26. SQLite的UPDATE查詢不會運行
- 27. SQL使用sum計算多個子查詢的結果
- 28. 問:Android上的SQLite計算
- 29. 如果行計數= 0運行查詢
- 30. 如何在我的查詢中正確SUM()?
請提供示例數據和預期輸出。 – 2011-04-09 17:23:41