10個SQL技巧之三:進行總計算
至少有十幾種方法可以實現執行總計。從概念上講,執行總計很容易理解。在Microsoft Excel中,您只需計算兩個先前(或後續)值的總和(或差異),然後使用有用的十字游標在整個電子表格中提取該公式。您透過電子表格“執行”該總計。一個“執行總數”。
在SQL中,最好的方法是使用視窗[url=https://blog.jooq.org/tag/window-functions]函式[/url]。
Window視窗函式是一個強大的概念 - 起初不是那麼容易理解,但實際上,它們真的很容易:
視窗函式是相對於SELECT轉換的當前行的行子集的聚合/排名
它本質上意味著視窗函式可以對當前行“上方”或“下方”的行執行計算。與GROUP BY普通聚合不同,它們不會對行進行轉換,這使得它們非常有用。
語法可以總結如下,單個部分是可選的
function(...) OVER ( PARTITION BY ... ORDER BY ... ROWS BETWEEN ... AND ... ) |
所以,我們有任何型別的函式(我們稍後會看到這些函式的例子),然後是OVER()子句,它指定了視窗。即OVER()條款定義:
- PARTITION:只有在相同分割槽的行作為當前行會被認為是視窗
- ORDER:該視窗可以獨立排序的,排序取決於我們要Select的是什麼
- ROWS(或RANGE)幀定義:視窗可以限制到“超前”和“後面”的固定數目的行數
這就是視窗功能。
現在,這有助於我們計算一個總計?請考慮以下資料:
| ID | VALUE_DATE | AMOUNT | BALANCE | |------|------------|--------|------------| | 9997 | 2014-03-18 | 99.17 | 19985.81 | | 9981 | 2014-03-16 | 71.44 | 19886.64 | | 9979 | 2014-03-16 | -94.60 | 19815.20 | | 9977 | 2014-03-16 | -6.96 | 19909.80 | | 9971 | 2014-03-15 | -65.95 | 19916.76 | |
我們假設BALANCE是我們想要從AMOUNT計算的,因此,用簡單的英語,任何餘額都可以用以下偽SQL表示:
TOP_BALANCE – SUM(AMOUNT) OVER (“all the rows on top of the current row”)
在真正的SQL中,那將寫成如下:
SUM(t.amount) OVER ( PARTITION BY t.account_id ORDER BY t.value_date DESC, t.id DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ) |
說明:
- 分割槽將計算每個銀行帳戶的總和,而不是整個資料集
- 排序將保證在求和之前(在分割槽內)對事務進行排序
- 在彙總之前,rows子句將僅考慮前面的行(在分割槽內,給定排序)
所有這些都將在記憶體中發生,在您已經在FROM .. WHERE等子句中選擇的資料集中,因此非常快。
相關文章
- 推進你的計算機網路事業:10個技巧計算機網路
- 10個SQL技巧之二:使用遞迴SQL生成資料SQL遞迴
- 怎麼進入雲端計算這個行業?行業
- 10 個技巧,讓你更專業地使用 console 進行 JS 除錯JS除錯
- SQL 有序計算SQL
- OpenCV使用ParallelLoopBody進行平行計算OpenCVParallelOOP
- 【個人紀錄】C++面試總結之三(設計模式)C++面試設計模式
- 計算機網路之三:DHCP協議計算機網路協議
- 怎麼進入雲端計算這個行業?新手怎麼學習雲端計算?行業
- 10個SQL技巧之一:一切都是表SQL
- SQL進階總結(二)SQL
- 五個 goland 進行 go 開發的小技巧GoLand
- 成功進行價值流管理的4個技巧
- 用Spark進行實時流計算Spark
- 怎麼進入雲端計算這個行業?雲端計算學習路線推薦行業
- 幾個SQL查詢小技巧SQL
- SQL 轉置計算SQL
- SQL 如何計算每個分組的中位數SQL
- 【個人總結】常用技巧
- 為什麼計算機採用補碼進行運算?計算機
- 【技巧總結】位運算裝逼指南
- 業界首個機密計算容器執行時—Inclavare Containers正式進入CNCF!AI
- 計算機求解10進位制轉換任意進位制計算機
- SQLServer進行SQL跟蹤SQLServer
- SQL Server進行Crash RecoverySQLServer
- Oracle DB 相關常用sql彙總7【手工繫結sql執行計劃】OracleSQL
- win10 自帶計算器快捷鍵有哪些_windows10計算器快捷鍵彙總Win10Windows
- 聊聊保證執行緒安全的10個小技巧執行緒
- SQL247 按照dept_no進行彙總(group_concat(X,Y))SQL
- 盤點 | 提高雲端計算安全性的5個技巧
- SQL 的後計算指令碼SQL指令碼
- 雲端計算這個行業前景如何?行業
- SQL對資料進行按月統計或對資料進行按星期統計的例項程式碼SQL
- 我常用的 10 個 CSS 一行程式碼技巧CSS行程
- 矩陣:如何使用矩陣操作進行 PageRank 計算?矩陣
- 使用 QuTrunk+Amazon ParallelCluster3 進行平行計算Parallel
- 你真的知道計算機是如何進行減法運算的嗎?計算機
- 這4個技巧幫助您選擇雲端計算資料庫資料庫