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