SQLite NTILE function

SQLite’s NTILE function is a powerful tool that allows you to divide a set of ordered rows into a specified number of groups, with each group having an equal number of rows or as close to equal as possible. The NTILE function assigns a group number to each row based on its position within the set.


The syntax for using NTILE in SQLite is as follows:

NTILE(integer_expression) OVER (
    [PARTITION BY partition_expression, ... ]
    ORDER BY sort_expression [ASC | DESC], ...

The integer_expression argument specifies the number of groups to divide the rows into. The PARTITION BY clause is optional and can be used to partition the rows into separate groups based on one or more expressions. The ORDER BY clause is required and specifies the order in which the rows should be sorted before being divided into groups.


For example, suppose you have a table named students with columns name, age, and grade. You want to divide the students into three groups based on their age, with each group having an equal number of students. You can use the following query:

name, age, grade, 
NTILE(3) OVER ( ORDER BY age ) AS age_group
FROM students;

This query will assign a value of 1, 2, or 3 to the age_group column for each row, based on the student’s age and the number of groups specified (in this case, 3). The ORDER BY clause sorts the rows by age before they are divided into groups.

Note that if the total number of rows is not evenly divisible by the number of groups specified, some groups will have one more row than others. For example, if you divide a set of 10 rows into three groups, two groups will have three rows and one group will have four rows.

In conclusion, the NTILE function in SQLite is a useful tool for dividing ordered rows into a specified number of groups. It can be used in a wide range of scenarios, such as assigning students to different classes based on their grades or dividing a list of products into categories based on their prices.