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