Teradata - Funciones OLAP

Las funciones OLAP son similares a las funciones agregadas, excepto que las funciones agregadas devolverán solo un valor, mientras que la función OLAP proporcionará las filas individuales además de los agregados.

Sintaxis

A continuación se muestra la sintaxis general de la función OLAP.

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

Las funciones de agregación pueden ser SUM, COUNT, MAX, MIN, AVG.

Ejemplo

Considere la siguiente tabla de sueldos.

Numero de empleado Bruto Deducción Salario neto
101 40.000 4000 36.000
102 80.000 6.000 74.000
103 90.000 7.000 83.000
104 75.000 5,000 70.000

A continuación se muestra un ejemplo para encontrar la suma acumulada o el total acumulado de NetPay en la tabla Salario. Los registros se ordenan por EmployeeNo y la suma acumulada se calcula en la columna NetPay.

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

Cuando se ejecuta la consulta anterior, produce el siguiente resultado.

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

RANGO

La función RANK ordena los registros según la columna proporcionada. La función RANK también puede filtrar el número de registros devueltos según el rango.

Sintaxis

A continuación se muestra la sintaxis genérica para usar la función RANK.

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

Ejemplo

Considere la siguiente tabla de empleados.

Numero de empleado Primer nombre Apellido JoinedDate DepartmentID Fecha de nacimiento
101 Miguel James 27/03/2005 1 5/1/1980
102 Robert Williams 25/4/2007 2 05/03/1983
103 Pedro Pablo 21/03/2007 2 1/4/1983
104 Alex Stuart 1/2/2008 2 6/11/1984
105 Robert James 1/4/2008 3 1/12/1984

La siguiente consulta ordena los registros de la tabla de empleados por Fecha de incorporación y asigna la clasificación en la Fecha de incorporación.

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

Cuando se ejecuta la consulta anterior, produce el siguiente resultado.

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

La cláusula PARTITION BY agrupa los datos por las columnas definidas en la cláusula PARTITION BY y realiza la función OLAP dentro de cada grupo. A continuación se muestra un ejemplo de la consulta que utiliza la cláusula PARTITION BY.

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

Cuando se ejecuta la consulta anterior, produce el siguiente resultado. Puede ver que el rango se restablece 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