📜  Oracle 中的 WIDTH_BUCKET( )函数

📅  最后修改于: 2022-05-13 01:54:40.066000             🧑  作者: Mango

Oracle 中的 WIDTH_BUCKET( )函数

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:大于 0 的 INTEGER 表达式指定我们要在其中划分表达式的桶数。

注意: MySQL 和 SQL Server 不支持 WIDTH_BUCKET,但 Oracle 和 PostgreSQL 支持 WIDTH_BUCKET 的 ANSI SQL 语法。

现在举个例子,在员工工资列上创建一个四元直方图,工资范围在 10,000 和 1,00,000 卢比之间。该函数将存储桶编号作为 - SALES GROUP 用于集合中的每个值。

第 1 步:我们创建一个表。我们创建了一个包含 3 列的表——员工 ID、员工姓名和员工薪水。为此,我们使用以下命令创建一个名为 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);

输出:

第三步:查看插入的数据

询问:

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;

输出: