> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Документация по оконной функции ntile

# ntile

Делит упорядоченные строки внутри партиции на указанное количество бакетов (групп) как можно более равного размера и возвращает номер бакета, к которому относится текущая строка. Нумерация бакетов начинается с 1. Для каждой партиции строки распределяются по бакетам по порядку: если количество строк не делится на количество бакетов, более ранние бакеты получают на одну строку больше, чем более поздние.

**Синтаксис**

```sql theme={null}
ntile (buckets)
  OVER ([[PARTITION BY grouping_column] [ORDER BY sorting_column]
        ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING] | [window_name])
FROM table_name
WINDOW window_name as ([PARTITION BY grouping_column] [ORDER BY sorting_column] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
```

Аргумент `buckets` должен быть константным положительным целым числом.

Требуется предложение `ORDER BY`. Рамка окна должна охватывать всю партицию (`ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING`); это также рамка по умолчанию, которая используется, если она не указана явно.

Подробнее о синтаксисе оконных функций см.: [Оконные функции — синтаксис](/docs/ru/reference/functions/window-functions/index#syntax).

**Возвращаемое значение**

* Номер бакета текущей строки в пределах её партиции. [UInt64](/docs/ru/reference/data-types/int-uint).

**Пример**

В следующем примере игроки распределяются по четырём бакетам в порядке убывания зарплаты.

```sql title="Query" theme={null}
CREATE TABLE salaries
(
    `team` String,
    `player` String,
    `salary` UInt32,
    `position` String
)
Engine = Memory;

INSERT INTO salaries FORMAT Values
    ('Port Elizabeth Barbarians', 'Gary Chen', 195000, 'F'),
    ('New Coreystad Archdukes', 'Charles Juarez', 190000, 'F'),
    ('Port Elizabeth Barbarians', 'Michael Stanley', 150000, 'D'),
    ('New Coreystad Archdukes', 'Scott Harrison', 150000, 'D'),
    ('Port Elizabeth Barbarians', 'Robert George', 195000, 'M'),
    ('South Hampton Seagulls', 'Douglas Benson', 150000, 'M'),
    ('South Hampton Seagulls', 'James Henderson', 140000, 'M');
```

```sql title="Query" theme={null}
SELECT player, salary,
       ntile(4) OVER (ORDER BY salary DESC, player ASC) AS bucket
FROM salaries;
```

```response title="Response" theme={null}
   ┌─player──────────┬─salary─┬─bucket─┐
1. │ Gary Chen       │ 195000 │      1 │
2. │ Robert George   │ 195000 │      1 │
3. │ Charles Juarez  │ 190000 │      2 │
4. │ Douglas Benson  │ 150000 │      2 │
5. │ Michael Stanley │ 150000 │      3 │
6. │ Scott Harrison  │ 150000 │      3 │
7. │ James Henderson │ 140000 │      4 │
   └─────────────────┴────────┴────────┘
```

Здесь семь строк и четыре бакета, поэтому в первых трёх бакетах по две строки, а в последнем — одна.
