Teradata-olap-functions
提供:Dev Guides
Teradata-OLAP関数
OLAP関数は集計関数に似ていますが、集計関数は値を1つだけ返すのに対して、OLAP関数は集計に加えて個々の行を提供します。
構文
以下は、OLAP関数の一般的な構文です。
<aggregate function> OVER
([PARTITION BY] [ORDER BY columnname][ROWS BETWEEN
UNBOUDED PRECEDING AND UNBOUNDED FOLLOWING)
集計関数には、SUM、COUNT、MAX、MIN、AVGがあります。
例
次の給与表を検討してください。
EmployeeNo | Gross | Deduction | NetPay |
---|---|---|---|
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 |
以下は、給与テーブルの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関数を使用するための一般的な構文は次のとおりです。
RANK() OVER
([PARTITION BY columnnlist] [ORDER BY columnlist][DESC|ASC])
例
次のEmployeeテーブルを検討してください。
EmployeeNo | FirstName | LastName | JoinedDate | DepartmentID | BirthDate |
---|---|---|---|---|---|
101 | Mike | James | 3/27/2005 | 1 | 1/5/1980 |
102 | Robert | Williams | 4/25/2007 | 2 | 3/5/1983 |
103 | Peter | Paul | 3/21/2007 | 2 | 4/1/1983 |
104 | Alex | Stuart | 2/1/2008 | 2 | 11/6/1984 |
105 | Robert | James | 1/4/2008 | 3 | 12/1/1984 |
次のクエリは、Joined Dateによって従業員テーブルのレコードを並べ、Joined Dateにランキングを割り当てます。
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