- Teradata 教程
- Teradata - 首頁
- Teradata 基礎
- Teradata - 簡介
- Teradata - 安裝
- Teradata - 架構
- Teradata - 關係型概念
- Teradata - 資料型別
- Teradata - 表
- Teradata - 資料操作
- Teradata - SELECT 語句
- 邏輯與條件運算子
- Teradata - 集合運算子
- Teradata - 字串操作
- Teradata - 日期/時間函式
- Teradata - 內建函式
- Teradata - 聚合函式
- Teradata - CASE 和 COALESCE
- Teradata - 主索引
- Teradata - 連線
- Teradata - 子查詢
- Teradata 高階
- Teradata - 表型別
- Teradata - 空間概念
- Teradata - 二級索引
- Teradata - 統計資訊
- Teradata - 壓縮
- Teradata - Explain
- Teradata - 雜湊演算法
- Teradata - 連線索引
- Teradata - 檢視
- Teradata - 宏
- Teradata - 儲存過程
- Teradata - 連線策略
- Teradata - 分割槽主索引
- Teradata - OLAP 函式
- Teradata - 資料保護
- Teradata - 使用者管理
- Teradata - 效能調優
- Teradata - FastLoad
- Teradata - MultiLoad
- Teradata - FastExport
- Teradata - BTEQ
- Teradata 有用資源
- Teradata - 問答
- Teradata - 快速指南
- Teradata - 有用資源
- Teradata - 討論
Teradata - OLAP 函式
OLAP 函式類似於聚合函式,但聚合函式僅返回一個值,而 OLAP 函式除了聚合之外,還會提供各個行。
語法
以下是 OLAP 函式的通用語法。
<aggregate function> OVER ([PARTITION BY] [ORDER BY columnname][ROWS BETWEEN UNBOUDED PRECEDING AND UNBOUNDED FOLLOWING)
聚合函式可以是 SUM、COUNT、MAX、MIN、AVG。
示例
考慮以下 Salary 表。
| 員工編號 | 總收入 | 扣除 | 淨收入 |
|---|---|---|---|
| 101 | 40,000 | 4,000 | 36,000 |
| 102 | 80,000 | 6,000 | 74,000 |
| 103 | 90,000 | 7,000 | 83,000 |
| 104 | 75,000 | 5,000 | 70,000 |
以下是如何在 Salary 表上查詢 NetPay 的累積和或執行總計的示例。記錄按 EmployeeNo 排序,並在 NetPay 列上計算累積和。
SELECT EmployeeNo, NetPay, SUM(Netpay) OVER(ORDER BY EmployeeNo ROWS UNBOUNDED PRECEDING) as TotalSalary FROM Salary;
執行上述查詢後,會生成以下輸出。
EmployeeNo NetPay TotalSalary ----------- ----------- ----------- 101 36000 36000 102 74000 110000 103 83000 193000 104 70000 263000 105 18000 281000
排名
RANK 函式根據提供的列對記錄進行排序。RANK 函式還可以根據排名過濾返回的記錄數。
語法
以下是使用 RANK 函式的通用語法。
RANK() OVER ([PARTITION BY columnnlist] [ORDER BY columnlist][DESC|ASC])
示例
考慮以下 Employee 表。
| 員工編號 | 名字 | 姓氏 | 入職日期 | 部門ID | 出生日期 |
|---|---|---|---|---|---|
| 101 | 邁克 | 詹姆斯 | 3/27/2005 | 1 | 1/5/1980 |
| 102 | 羅伯特 | 威廉姆斯 | 4/25/2007 | 2 | 3/5/1983 |
| 103 | 彼得 | 保羅 | 3/21/2007 | 2 | 4/1/1983 |
| 104 | 亞歷克斯 | 斯圖爾特 | 2/1/2008 | 2 | 11/6/1984 |
| 105 | 羅伯特 | 詹姆斯 | 1/4/2008 | 3 | 12/1/1984 |
以下查詢按入職日期對員工表中的記錄進行排序,並在入職日期上分配排名。
SELECT EmployeeNo, JoinedDate,RANK() OVER(ORDER BY JoinedDate) as Seniority FROM Employee;
執行上述查詢後,會生成以下輸出。
EmployeeNo JoinedDate Seniority ----------- ---------- ----------- 101 2005-03-27 1 103 2007-03-21 2 102 2007-04-25 3 105 2008-01-04 4 104 2008-02-01 5
PARTITION BY 子句按 PARTITION BY 子句中定義的列對資料進行分組,並在每個組內執行 OLAP 函式。以下是如何使用 PARTITION BY 子句的示例。
SELECT EmployeeNo, JoinedDate,RANK() OVER(PARTITION BY DeparmentNo ORDER BY JoinedDate) as Seniority FROM Employee;
執行上述查詢後,會生成以下輸出。您可以看到每個部門的排名都重置了。
EmployeeNo DepartmentNo JoinedDate Seniority
----------- ------------ ---------- -----------
101 1 2005-03-27 1
103 2 2007-03-21 1
102 2 2007-04-25 2
104 2 2008-02-01 3
105 3 2008-01-04 1
廣告