NTILE Function - SQL
Overview
The NTILE function in SQL distributes rows into a specified number of groups, or "tiles," based on an ordering within each partition of a result set. It is useful for dividing data evenly across partitions.
Example:
SELECT department_id, first_name, salary,
NTILE(4) OVER (PARTITION BY department_id ORDER BY salary DESC)
FROM company.employees
Syntax:
SELECT column_name,
NTILE(number_of_tiles) OVER (PARTITION BY partition_column[s] ORDER BY order_column[s])
FROM table_name
partition_column[s]
is the column or columns that divide the result set into partitions.
order_column[s]
is the column or columns that specify the order of rows within each partition.
NTILE(number_of_tiles)
distributes rows into the specified number of groups (number_of_tiles
) based on the ordering within each partition.
Sample Data:
Before
department_id | first_name | salary |
---|---|---|
3 | Frank | 123000 |
2 | Jane | 135000 |
3 | Ashley | 115000 |
NULL | Glenn | 115000 |
2 | Kelly | 125000 |
1 | Richard | 120000 |
1 | George | 105000 |
5 | Kyle | 200000 |
2 | James | 107000 |
1 | Gustavo | 100000 |
After
department_id | first_name | salary |
---|---|---|
NULL | Glenn | 115000 |
1 | Richard | 120000 |
1 | George | 105000 |
1 | Gustavo | 100000 |
2 | Jane | 135000 |
2 | Kelly | 125000 |
2 | James | 107000 |
3 | Ashley | 115000 |
3 | Frank | 123000 |
5 | Kyle | 200000 |
Example: Query without the WHERE Statement
In this example, we are returning the department_id, first_name, and salary column, along with a NTILE column to divide the employees within each department into 2 approximately equal-sized groups based on their salary, ordering them in descending order. The result is a ranking of 1 or 2 for each employee, indicating which half of the salary distribution they fall into within their department.
Example: Query with the WHERE Statement
In this example, we are filtering for only rows in department_id 1. We are returning the department_id, first_name, and salary column, along with a NTILE column to divide the employees within each department into 2 approximately equal-sized groups based on their salary, ordering them in descending order. The result is a ranking of 1 or 2 for each employee, indicating which half of the salary distribution they fall into within their department.