T-SQL 語法備忘錄
1. COMPUTE 子句 (SQL 2012 起無此功能)
在查詢結果集結尾來顯示計算結果。
COMPUTE FunctionType(Expression) [By Expression]
Function Type :
- AVG 取平均值
- COUNT 計數
- MAX 取最大值
- MIN 取最小值
- STDEV 取標準差
- STDEVP 取擴展標準差
- SUM 總計
- VAR 取變異數
- VARP 取擴展變異數
2. GROUP BY 子句
Group By expression | Group By [ROLLUP | CUBE | GROUPING SETS] (expression)
- ROLLUP 產生彙總資料列,小計或超彙總資料列以及總計。
- CUBE 產生簡單的彙總資料列,ROLLUP 超彙總資料列和跨表格式資料列。
- GROUPING SETS 在一個查詢中指定多組資料。 只有指定的群組才會彙總,而不是 CUBE 或 ROLLUP 產生的一組完整彙總。
HAVING <condition> 搭配 GROUP BY 子句來使用,用來篩選 GROUP 彙整後的資料。
3. ORDER BY 子句
Order By expression [ASC | DESC] [Offset_Fetch]
- Offset_Fetch
OFFSET n ROWS [FETCH FIRST | NEXT n ROWS ONLY
依據指定的資料行清單排序查詢的結果集,並選擇性地將傳回的資料列限制在指定範圍內。
例如略過 5 個資料列,再傳回下 15 個資料列,Offset 5 ROWS FETCH NEXT 15 ROWS ONLY
這個功能可以做為擷取分頁資料的功臣。也就是說如果抓取的資料數有 5000 筆時,當然可以載入到 DataTable 中讓 DataGridView (WinForm) 或是 GridView (WabForm) 來處理。
但要是資料有10萬筆,那麼將會消耗大量的記憶體,所以可以透過這個方式,來抓取指定筆數的資料。
4. ROW_NUMBER 語法
ROW_NUMBER( ) OVER ( [PARTITION BY expression] ORDER BY expression )
- PARTITION BY : 依指定條件來分割結果集。
產生每個分割的序號列,序號自 1 開始。
5. OVER 子句
OVER ( [PARTITION BY expression] ORDER BY expression )
- PARTITION BY : 依指定條件來分割結果集。
在套用其他函數前,來決定資料列集的分割與排序。例如搭配 ROW_NUMBER 來使用,或是搭配 SUM 等等。
6. RANK 語法
RANK( ) OVER ( [PARTITION BY expression] ORDER BY expression )
- PARTITION BY : 依指定條件來分割結果集。
依指定條件分割資料集,再依照排序設定來產生排名次序。當有出現相同的排名後,則會產生非連續的名次編號。
例如排名中有兩筆並列第 3 時,就不會有第 4 的名次,而是直接跳到第 5 的名次。如果要有連續的名次,同時又允許有併列的名次,則必需要使用 DENSE_RANK。
程式是運氣與直覺堆砌而成的奇蹟。
若不具備這兩者,不可能以這樣的工時實現這樣的規格。
修改規格是對奇蹟吐槽的褻瀆行為。
而追加修改則是相信奇蹟還會重現的魯莽行動。