This section tells how to construct queries that give you analytical information. There are two types of analytical functions: rank and inverse distribution. The rank analytical functions rank items in a group, compute distribution, and divide a result set into a number of groupings. The inverse distribution analytical functions return a k-th percentile value, which can be used to help establish a threshold acceptance value for a set of data.
The rank analytical functions are RANK, DENSE_RANK, PERCENT_RANK, and NTILE. The inverse distribution analytical functions are PERCENTILE_CONT and PERCENTILE_DISC.
Suppose you want to rank employee salaries. In the following example, the NTILE function divides employees into four groups based on the employee’s salary. Employees whose ntile ranking = 1 are in the top 25% salary range.
SELECT Name Salary, NTILE(4) OVER(ORDER BY salary DESC)as Ranking FROM emp1;
Name |
Salary |
Ranking |
---|---|---|
Sandy |
55000 |
1 |
Peter |
48000 |
1 |
Lisa |
38000 |
1 |
Scott |
29000 |
1 |
Tim |
29000 |
2 |
Tom |
28000 |
2 |
Mike |
28000 |
2 |
Adam |
25000 |
3 |
Antonia |
22000 |
3 |
Jim |
22000 |
3 |
Anna |
18000 |
4 |
Jeff |
18000 |
4 |
Amy |
18000 |
4 |
NTILE is a analytical function that distributes or ranks query results into a specified number of buckets and assigns the bucket number to each row in the bucket. You can divide a result set into tenths (deciles), fourths (quartiles), and other numbers of groupings.
The rank analytical functions require an OVER (ORDER BY) clause. The ORDER BY clause specifies the parameter on which ranking is performed and the order in which the rows are sorted in each group. Note that this ORDER BY clause is used only within the OVER clause and is not an ORDER BY for the SELECT.
The OVER clause indicates that the function operates on a query result set. The result set is the rows that are returned after the FROM, WHERE, GROUP BY, and HAVING clauses have all been evaluated. The OVER clause defines the data set of the rows to include in the computation of the rank analytical function.
Similarly, the inverse distribution functions require a WITHIN GROUP (ORDER BY) clause. The ORDER BY specifies the expression on which the percentile function is performed and the order in which the rows are sorted in each group. This ORDER BY clause is used only within the WITHIN GROUP clause and is not an ORDER BY for the SELECT. The WITHIN GROUP clause distributes the query result into an ordered data set from which the function calculates a result.
For more details on the analytical functions, see “Analytical functions,” Chapter 4, “SQL Functions,” in Reference: Building Blocks, Tables, and Procedures For information on individual analytical functions, see the section for each function in the same chapter.