Teradata - Funções OLAP

As funções OLAP são semelhantes às funções de agregação, exceto que as funções de agregação retornarão apenas um valor, enquanto a função OLAP fornecerá as linhas individuais além dos agregados.

Sintaxe

A seguir está a sintaxe geral da função OLAP.

<aggregate function> OVER  
([PARTITION BY] [ORDER BY columnname][ROWS BETWEEN 
UNBOUDED PRECEDING AND UNBOUNDED FOLLOWING)

As funções de agregação podem ser SUM, COUNT, MAX, MIN, AVG.

Exemplo

Considere a seguinte tabela de salários.

EmployeeNo Bruto Dedução Pagamento líquido
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

A seguir está um exemplo para encontrar a soma cumulativa ou total corrente do NetPay na tabela Salário. Os registros são classificados por EmployeeNo e a soma cumulativa é calculada na coluna NetPay.

SELECT  
EmployeeNo, NetPay, 
SUM(Netpay) OVER(ORDER BY EmployeeNo ROWS  
UNBOUNDED PRECEDING) as TotalSalary 
FROM Salary;

Quando a consulta acima é executada, ela produz a seguinte saída.

EmployeeNo     NetPay     TotalSalary 
-----------  -----------  ----------- 
   101         36000        36000 
   102         74000        110000 
   103         83000        193000 
   104         70000        263000 
   105         18000        281000

CLASSIFICAÇÃO

A função RANK ordena os registros com base na coluna fornecida. A função RANK também pode filtrar o número de registros retornados com base na classificação.

Sintaxe

A seguir está a sintaxe genérica para usar a função RANK.

RANK() OVER 
([PARTITION BY columnnlist] [ORDER BY columnlist][DESC|ASC])

Exemplo

Considere a seguinte tabela de funcionários.

EmployeeNo Primeiro nome Último nome Data de adesão DepartmentID Data de nascimento
101 Mike James 27/03/2005 1 05/01/1980
102 Robert Williams 25/04/2007 2 05/03/1983
103 Peter Paulo 21/03/2007 2 01/04/1983
104 Alex Stuart 01/02/2008 2 06/11/1984
105 Robert James 04/01/2008 3 01/12/1984

A consulta a seguir ordena os registros da tabela de funcionários por Data de adesão e atribui a classificação na Data de adesão.

SELECT EmployeeNo, JoinedDate,RANK() 
OVER(ORDER BY JoinedDate) as Seniority 
FROM Employee;

Quando a consulta acima é executada, ela produz a seguinte saída.

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

A cláusula PARTITION BY agrupa os dados pelas colunas definidas na cláusula PARTITION BY e executa a função OLAP dentro de cada grupo. A seguir está um exemplo de consulta que usa a cláusula PARTITION BY.

SELECT EmployeeNo, JoinedDate,RANK() 
OVER(PARTITION BY DeparmentNo ORDER BY JoinedDate) as Seniority 
FROM Employee;

Quando a consulta acima é executada, ela produz a seguinte saída. Você pode ver que a classificação é redefinida para cada departamento.

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