NTILE helps split data into equal parts or groups. It makes it easy to see how data is spread out.
NTILE for distribution in SQL
NTILE(number_of_groups) OVER (ORDER BY column_name)
number_of_groups is how many parts you want to split your data into.
The ORDER BY inside OVER() decides how rows are sorted before splitting.
SELECT name, score, NTILE(4) OVER (ORDER BY score DESC) AS quartile FROM students;
SELECT product, price, NTILE(3) OVER (ORDER BY price) AS price_group FROM products;
This example creates a sales table, inserts 5 rows, then splits them into 2 groups by amount.
CREATE TABLE sales (id INT, amount INT); INSERT INTO sales VALUES (1, 100), (2, 200), (3, 300), (4, 400), (5, 500); SELECT id, amount, NTILE(2) OVER (ORDER BY amount) AS half FROM sales;
If the number of rows is not divisible by the number of groups, some groups will have one more row.
NTILE assigns group numbers starting at 1 up to the number of groups.
NTILE splits data into equal groups based on order.
Use it to compare parts of your data easily.
Groups are numbered starting at 1.
Practice
What does the SQL function NTILE(n) do when applied to a dataset?
Solution
Step 1: Understand the purpose of NTILE
NTILE divides rows into a specified number of groups, distributing rows as evenly as possible.Step 2: Compare options with NTILE behavior
Only It divides the dataset intongroups with roughly equal number of rows. correctly describes this grouping behavior; others describe different SQL functions.Final Answer:
It divides the dataset into n groups with roughly equal number of rows. -> Option DQuick Check:
NTILE splits data into equal groups = It divides the dataset intongroups with roughly equal number of rows. [OK]
- Confusing NTILE with ORDER BY sorting
- Thinking NTILE counts rows
- Assuming NTILE filters rows
Which of the following is the correct syntax to use NTILE to split rows into 4 groups ordered by salary?
SELECT employee_id, salary, NTILE(4) OVER (ORDER BY salary) AS quartile FROM employees;
Solution
Step 1: Recall NTILE syntax with window functions
NTILE requires OVER() with ORDER BY inside parentheses to define ordering.Step 2: Check each option's syntax
Only SELECT employee_id, salary, NTILE(4) OVER (ORDER BY salary) AS quartile FROM employees; uses correct syntax: NTILE(4) OVER (ORDER BY salary). Others misuse BY, ORDER BY, or PARTITION BY incorrectly.Final Answer:
SELECT employee_id, salary, NTILE(4) OVER (ORDER BY salary) AS quartile FROM employees; -> Option CQuick Check:
NTILE needs OVER(ORDER BY) syntax = SELECT employee_id, salary, NTILE(4) OVER (ORDER BY salary) AS quartile FROM employees; [OK]
- Omitting OVER() clause
- Using BY instead of OVER(ORDER BY)
- Confusing PARTITION BY with ORDER BY
Given the table sales with amount values: 10, 20, 30, 40, 50, what is the ntile(3) value for the row with amount = 40 when ordered by amount?
SELECT amount, NTILE(3) OVER (ORDER BY amount) AS tile FROM sales;
Solution
Step 1: Order amounts and assign NTILE(3)
Sorted amounts: 10, 20, 30, 40, 50. NTILE(3) splits 5 rows into 3 groups: first 2 rows in tile 1, next 2 in tile 2, last 1 in tile 3.Step 2: Find tile for amount 40
Amount 40 is the 4th row, which falls in tile 2.Final Answer:
2 -> Option AQuick Check:
Row 4 in 3 groups = tile 2 [OK]
- Assuming equal group sizes always
- Assigning tile 3 to amount 40 incorrectly
- Confusing row position with tile number
Identify the error in this query using NTILE:
SELECT id, NTILE(0) OVER (ORDER BY score) AS group_num FROM players;
Solution
Step 1: Check NTILE argument validity
NTILE requires a positive integer greater than zero to define groups.Step 2: Analyze the query
NTILE(0) is invalid and causes an error; ORDER BY is present, PARTITION BY is optional, alias is valid.Final Answer:
NTILE cannot have 0 as argument; it must be a positive integer. -> Option BQuick Check:
NTILE argument > 0 required = NTILE cannot have 0 as argument; it must be a positive integer. [OK]
- Using zero or negative numbers in NTILE
- Thinking PARTITION BY is mandatory
- Confusing alias rules
You want to split 10 employees into 4 groups using NTILE(4) ordered by experience_years. How many employees will be in the third group?
Solution
Step 1: Calculate base group size
10 employees divided into 4 groups means each group gets at least 2 employees (since 10/4 = 2.5).Step 2: Distribute extra employees
Since 10 is not divisible by 4, the first 2 groups get 3 employees each, and the last 2 groups get 2 employees each. The third group is the first group with 2 employees.Step 3: Confirm group sizes
Groups: 1=3, 2=3, 3=2, 4=2 employees.Final Answer:
2 -> Option AQuick Check:
10 rows / 4 groups = 2 or 3 per group; third group has 2 [OK]
- Assuming all groups have equal size always
- Assigning 3 employees to third group incorrectly
- Ignoring leftover rows distribution
Ready to prove it?
Pass the test and this pattern moves unknown
