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