如何獲得一列是另一列之前所有值的總和?如何計算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. 的NodeJS - 如何殺死一個正在運行的SQLite查詢
- 3. 如何正確計算在PDO查詢
- 4. 如何安排在計時器結束後運行sqlite查詢?
- 5. 與SUM計算嵌套查詢
- 6. 如何計算從查詢創建的臨時列的SUM
- 7. 如何使用我的查詢在php中運行計算
- 8. 如何計算postgresql中的MAX(SUM()),尤其是查詢
- 9. 的Sql Sum函數運行的查詢
- 10. PHP如何使用SUM和數學運算符打印查詢
- 11. 計算聚合運行篩選查詢
- 12. SQL查詢滯後運行計算
- 13. 如何計算SUM的結果在MySQL
- 14. 使用SUM進行計算,查詢不起作用?
- 15. MySQL查詢:SUM計數重複行
- 16. 在sql server上SUM查詢
- 17. SQL如何檢查服務正在運行另一臺計算機上
- 18. 如何在SQL Server中執行sum(a)/ sum(b)查詢?
- 19. 如何計算高級查詢行
- 20. 查詢不在正在運行的服務器上運行
- 21. SQLite查詢在SQLiteManager上運行,但不在iOS上
- 22. 查詢包含針對OLEDB提供程序運行的CTE在一臺計算機上失敗,但在另一臺計算機上運行的查詢
- 23. 如何解決SQLite查詢中的計算列值?
- 24. 如何在EF上運行SQL查詢?
- 25. 如何在內部查詢的外部查詢中執行算術運算
- 26. 如何乘法計算在SUM PigLatin
- 27. 我如何計算查詢
- 28. 如何在sqlite中使用like運算符進行復雜查詢
- 29. 計算SUM
- 30. 在SQL Server中使用dinaymic查詢計算SUM Column Wise
請提供示例數據和預期輸出。 – 2011-04-09 17:23:41