Оконная функция PostgreSQL NTILE

Оконная функция PostgreSQL База данных

Оконная функция PostgreSQL

Оконные методы в PostgreSQL были отброшены, чтобы уравнять расходящиеся данные, и они необходимы для аналитических и других сценариев использования PostgreSQL. Метод NTILE (), за которым следует предложение OVER в PostgreSQL, отбрасывается, чтобы разделить организованные строки на нечто вроде серии градуированных сегментов. Сегменты — это не что иное, как набор ранжированных групп. В этой статье вы узнаете, как разбить отсортированные строки в разделе на заданное число ранжированных сегментов с помощью функции PostgreSQL NTILE (). Метод NTILE () назначает номер сегмента каждой группе, начиная с 1 в наборе, демонстрируя набор, в котором строка занимает свое место.

Синтаксис

>> NTILE(buckets) OVER ( [PARTITION BY partition expression,… ] [ORDET BY sort expression] ) [ASC | DESC],…]);

Прежде всего, чтобы понять метод NTILE, войдите в оболочку PostgreSQL. Поэтому попробуйте запустить оболочку командной строки PostgreSQL из приложений. Для работы на другом Сервере введите имя сервера; в противном случае нажмите Enter. Если вам нужно попрактиковаться в ранее назначенной базе данных, например, Postgres, нажмите Enter или введите название банка данных, например, «тест». Чтобы использовать порт, отличный от 5432, впишите его; если нет, оставьте все как есть и нажмите Enter, чтобы продолжить. Он может попросить вас ввести имя пользователя, если вам нужно перейти на новое имя пользователя. Введите имя пользователя; в противном случае просто нажмите Enter. Наконец, вы должны ввести свой текущий пароль пользователя, чтобы переключиться с помощью командной строки, используя этого конкретного пользователя, как показано ниже. Впоследствии, введя в действие все обязательные данные, вы сможете приступить к работе над NTILE.

Чтобы начать работу с NTILE, вам нужно создать новую таблицу

Чтобы начать работу с NTILE, вам нужно создать новую таблицу с помощью команды CREATE, если у вас ее нет. Подумайте о приведенной ниже таблице «employee» в вашей базе данных PostgreSQL с именем «test». Эта таблица содержит четыре столбца, например идентификатор, имя, возраст и зарплату сотрудника определенной компании. В каждом столбце всего 10 строк, что означает 10 записей в каждом поле столбца.

>> SELECT * FROM employee;

Вначале мы должны понять простую концепцию выборки записей

Вначале мы должны понять простую концепцию выборки записей из таблицы с помощью предложения ORDER BY. Мы выполняли приведенную ниже команду SELECT без использования NTILE, чтобы кратко проработать и понять концепцию. Извлекаем записи для столбцов; имя, возраст и зарплата при сортировке записей в порядке возрастания поля «возраст». Вы можете видеть, что он просто отображает записи, как показано на изображении.

>> SELECT name, age, salary FROM employee ORDER BY age;

Вы можете видеть, что он просто отображает записи, как показано на изображении

Использование NTILE () OVER с предложением ORDER BY

Предполагая, что та же таблица «employee», давайте начнем использовать предложение NTILE () OVER в нашем примере. В этом примере мы выбрали два столбца; имя и зарплата, при сортировке результата по возрастанию столбца «зарплата». Результат будет содержать данные, если возраст сотрудника превышает 24 года. Мы определили значение сегмента NTILE как «3», потому что мы хотим разделить строки на 3 сегмента, например, от 1 до 3. Вы можете видеть, что строки были успешно разделены на 3 равных сегмента, по 3 строки в каждом сегменте..

>> SELECT name, salary, NTILE(3) OVER( ORDER BY salary ) FROMemployee WHERE age > ‘24’;

Теперь давайте рассмотрим другой пример с той же таблицей

Теперь давайте рассмотрим другой пример с той же таблицей «employee». На этот раз мы хотим получить записи из трех столбцов; имя, возраст и зарплата с помощью запроса SELECT в командной оболочке. В предложение WHERE внесены небольшие изменения. В настоящее время мы ищем записи таблицы «employee» с возрастом менее 27 лет, в которую будут попадать только записи с возрастом менее 27 лет. С другой стороны, значение сегмента не изменилось, поскольку оно снова 3. Попробовав указанную команду, мы нашли только три записи, поровну разделенные на 3 сегмента, как показано на рисунке.

>> SELECT name, age, salary, NTILE(3) OVER ( ORDER BY salary ) FROM employee WHERE age < ‘27’;

поровну разделенные на 3 сегмента, как показано на рисунке

Использование NTILE () OVER с условиями ORDER BY и PARTITION BY

Давайте рассмотрим пример NTILE () OVER при одновременном использовании предложений PARTITION BY и ORDER BY. Предположим, что будет использоваться неизмененная таблица «employee» из базы данных «test». В этом примере вам нужно выбрать три столбца; имя, возраст и зарплата, при сортировке по возрастанию поля «возраст». Кроме того, мы использовали предложение PARTITION BY в столбце «зарплата», чтобы разбить таблицу на разделы в соответствии с этим столбцом. В этом конкретном запросе нет конкретного условия, которое означает, что будут отображаться все записи таблицы «employee». Корзина NTILE имеет значение «3». При выполнении нижеприведенного запроса вы увидите результат, указанный ниже. Разделы выполняются в соответствии с различными значениями столбца «зарплата». Все значения столбца «зарплата» различны, поэтому он лежит в разных разделах, кроме значения «60000». Это означает, что каждый раздел имеет одно значение, кроме одного. После этого все строки раздела были ранжированы по сегментам. Только одно ведро получило 2-е место.

>> SELECT name, age, salary, NTILE(3) OVER( PARTITION BY salary, ORDER BY age ) FROM employee;

Возьмем тот же пример NTILE () OVER с использованием предложений

Возьмем тот же пример NTILE () OVER с использованием предложений PARTITION BY и ORDER BY с предложением WHERE. В предложении WHERE мы определили условие, которое гласит, что будут извлечены только записи, возраст сотрудника которых меньше 27 лет. Мы получили только 3 результата с 2 разделениями по возрасту и столбцу «ntile» с рангами.

>> SELECT name, age, salary, NTILE(3) OVER( PARTITION BY salary, ORDER BY age ) FROM employee WHERE age < ‘27’;

Мы получили только 3 результата с 2 разделениями по возрасту и столбцу

Вывод

В этом руководстве мы обсудили различные примеры функций ntile. Вы можете реализовать их по своему усмотрению.

Читайте также:  Использование режима безопасного обновления MySQL
Оцените статью
bestprogrammer.ru
Добавить комментарий