В 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