Oracle
 sql >> база данни >  >> RDS >> Oracle

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

В Oracle, WIDTH_BUCKET() функцията ви позволява да конструирате хистограми с еднаква ширина, в които диапазонът на хистограмата е разделен на интервали с еднакъв размер.

За даден израз WIDTH_BUCKET() връща номера на кофата, в която би попаднала стойността на този израз, след като бъде оценена.

Синтаксис

Синтаксисът е така:

WIDTH_BUCKET(expr, min_value, max_value, num_buckets)

Къде:

  • expr е изразът, за който се създава хистограмата. Този израз трябва да се оценява до числова стойност или стойност за дата и час или до стойност, която може да бъде имплицитно преобразувана в числова стойност или стойност за дата и час. Ако expr оценява на null , тогава изразът връща null .
  • min_value и max_value са изрази, които се разрешават до крайните точки на приемливия диапазон за expr . И двата израза трябва също да се оценяват до числови стойности или стойности за дата и час и нито един от тях не може да се оценява на null .
  • num_buckets е израз, който се разрешава до константа, указваща броя на кофите. Този израз трябва да се оценява като цяло положително число.

Пример

Ето пример, за да демонстрирате как работи.

SELECT 
  WIDTH_BUCKET(3, 1, 12, 3) AS r1,
  WIDTH_BUCKET(5, 1, 12, 3) AS r2,
  WIDTH_BUCKET(9, 1, 12, 3) AS r3
FROM DUAL;

Резултат:

   R1    R2    R3 
_____ _____ _____ 
    1     2     3 

Ето едно обяснение. Нека разгледаме всеки аргумент, като започнем от последния и се върнем към първия.

  • Четвърти аргумент :Посочвам три кофи. Правя това с помощта на 3 като четвърти аргумент.
  • Втори и трети аргумент :Уточнявам, че диапазонът е между 1 и 12. В този случай вторият ми аргумент е 1 и третият аргумент е 12 .
  • Първи аргумент :Тази стойност се сравнява с втория и третия аргумент, за да се знае към коя от трите кофи трябва да бъде присвоена. В моя пример извиквам WIDTH_BUCKET() три пъти, за да се илюстрира по-добре концепцията. Правя това, за да мога да предоставя три различни стойности като първи аргумент, всяка от които е присвоена на различен сегмент.

Следната таблица предоставя друг начин за визуализиране на това:

Стойности Кофа
1, 2, 3, 4 Кофа 1
5, 6, 7, 8 Кофа 2
9, 10, 11, 12 Кофа 3

Така че можем да видим, че първата група приема стойности между 1 и 4, втората група между 5 и 8, а третата кофа е за стойности между 9 и 12.

Ако трябваше да го променя така, че да има четири кофи, кодът ми може да изглежда така:

SELECT 
  WIDTH_BUCKET(3, 1, 12, 4) AS r1,
  WIDTH_BUCKET(5, 1, 12, 4) AS r2,
  WIDTH_BUCKET(9, 1, 12, 4) AS r3
FROM DUAL;

И таблицата ще изглежда така:

Стойности Кофа
1, 2, 3 Кофа 1
4, 5, 6 Кофа 2
7, 8, 9 Кофа 3
10, 11, 12 Кофа 4

Ето още един пример, в който се променят само размерите на кофата:

SELECT 
  WIDTH_BUCKET(5, 1, 12, 3) AS r1,
  WIDTH_BUCKET(5, 1, 12, 6) AS r2,
  WIDTH_BUCKET(5, 1, 12, 10) AS r3
FROM DUAL;

Резултат:

   R1    R2    R3 
_____ _____ _____ 
    2     3     4 

Извън обхват

Ако входът е извън обхвата на кофата, ще получите или 0 или num_buckets +1, в зависимост от това дали входът е под диапазона или над него. В такива случаи Oracle Database създава подпоток с номер 0 и кофа за препълване с номер num_buckets +1.

Пример:

SELECT 
  WIDTH_BUCKET(-3, 1, 12, 3),
  WIDTH_BUCKET(20, 1, 12, 3)
FROM DUAL;

Резултат:

   WIDTH_BUCKET(-3,1,12,3)    WIDTH_BUCKET(20,1,12,3) 
__________________________ __________________________ 
                         0                          4 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция NANVL() в Oracle

  2. Прикачени файлове в Oracle Applications R12

  3. Кога Oracle индексира стойности на нулеви колони?

  4. Нулиране на последователността в oracle 11g

  5. Как да разрешите липсващия израз ORA-00936