Функция WIDTH_BUCKET() в Oracle

Опубликовано: 1 Сентября, 2022

WIDTH_BUCKET() — это математическая функция, используемая в Oracle и PostgreSQL. Как следует из названия, width_bucket означает разделение гистограммы на сегменты одинаковой ширины, то есть каждый сегмент имеет одинаковый размер/интервал. Эта функция принимает четыре входа: выражение, нижнюю границу, верхнюю границу выражения и количество групп, на которые мы хотим разделить гистограмму. Таким образом, после обработки выражения возвращается номер корзины, содержащий требуемое значение. Таким образом, используя функцию width_bucket, мы получаем гистограмму одинаковой ширины, но с разной высотой.

Функция width_bucket — очень полезная функция группировки.

Синтаксис:

WIDTH_BUCKET(expression, hist_min_value,
hist_max_value, num_buckets)

Параметры:

  • выражение: числовое выражение, которое должно быть сгруппировано с различными интервалами. Это выражение должно вычислять числовое значение или значение даты и времени либо значение, которое может быть неявно преобразовано в числовое значение или значение даты и времени. Значение должно находиться в диапазоне от -(2^53 – 1) до 2^53 – 1 (включительно).
  • hist_min_value: числовое выражение или выражение значения даты и времени, которое предоставляет нижнюю границу/минимальное значение корзины.
  • hist_max_value: числовое выражение или выражение значения даты и времени, которое предоставляет верхнюю границу/максимальное значение корзины.
  • num_buckets: выражение INTEGER больше 0 указывает количество сегментов, на которые мы хотим разделить наше выражение.

ПРИМЕЧАНИЕ. MySQL и SQL Server не поддерживают WIDTH_BUCKET, но Oracle и PostgreSQL поддерживают синтаксис ANSI SQL для WIDTH_BUCKET.

Теперь возьмем пример, чтобы создать гистограмму с четырьмя баксами в столбце зарплаты сотрудников с зарплатами в диапазоне от 10 000 до 1 00 000 рупий. Функция возвращает номер корзины как – ГРУППА ПРОДАЖ для каждого значения в наборе.

Шаг 1: Создаем таблицу. Мы создали таблицу, которая состоит из 3 столбцов — идентификатора сотрудника, имени сотрудника и зарплаты сотрудника. Для этого мы используем приведенную ниже команду для создания таблицы с именем GeeksforGeeks_demo.

Запрос:

create table geeksforgeeks_demo(employee_id number,
employee_name varchar(20),employee_salary number);

Выход:

Шаг 2: Это запрос на вставку строк в таблицу.

Запрос:

insert into GeeksforGeeks_demo values(1, "Chandler", 75000);
insert into GeeksforGeeks_demo values(2, "Erica", 12500);
insert into GeeksforGeeks_demo values(3, "Ron", 71000);
insert into GeeksforGeeks_demo values(4, "Lucy", 52000);
insert into GeeksforGeeks_demo values(5, "Adam", 22000);
insert into GeeksforGeeks_demo values(6, "Steve", 48500);
insert into GeeksforGeeks_demo values(7, "Monica", 84800);
insert into GeeksforGeeks_demo values(8, "Rachel", 65000);
insert into GeeksforGeeks_demo values(9, "Joey", 91500);
insert into GeeksforGeeks_demo values(10, "Phoebe", 36000);
insert into GeeksforGeeks_demo values(11, "Mike", 18000);
insert into GeeksforGeeks_demo values(12, "Liam", 46000);

Выход:

Шаг 3: Просмотр вставленных данных

Запрос:

select * from GeeksforGeeks_demo;

Выход:

Шаг 4: Запросите таблицу, вызвав WIDTH_BUCKET():

Запрос:

select 
      employee_id,
      employee_name, 
      employee_salary,  
      width_bucket(employee_salary,
       10000, 100000, 4) salary_group
from GeeksforGeeks_demo
order by salary_group;

Выход: