Учебники

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.

пример

Рассмотрим следующую таблицу зарплат.

Сотрудник № Валовой дедукция NetPay
101 40000 4000 36000
102 80000 6000 74000
103 90000 7000 83000
104 75000 5000 70000

Ниже приведен пример для определения накопленной суммы или промежуточной суммы 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])

пример

Рассмотрим следующую таблицу сотрудников.

Сотрудник № Имя Фамилия JoinedDate DepartmentID Дата рождения
101 Майк Джеймс 3/27/2005 1 1/5/1980
102 Роберт Williams 4/25/2007 2 3/5/1983
103 Питер Павел 3/21/2007 2 4/1/1983
104 Alex Стюарт 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;

Когда вышеуказанный запрос выполняется, он производит следующий вывод. Вы можете видеть, что ранг сбрасывается для каждого отдела.