W Oracle WIDTH_BUCKET() Funkcja umożliwia konstruowanie histogramów równorzędnych, w których zakres histogramu jest podzielony na przedziały o identycznej wielkości.
Dla danego wyrażenia WIDTH_BUCKET() zwraca numer segmentu, do którego spadłaby wartość tego wyrażenia po przeanalizowaniu.
Składnia
Składnia wygląda tak:
WIDTH_BUCKET(expr, min_value, max_value, num_buckets) Gdzie:
exprto wyrażenie, dla którego tworzony jest histogram. To wyrażenie musi być ocenione jako wartość liczbowa lub data-godzina lub wartość, którą można niejawnie przekonwertować na wartość liczbową lub datę i godzinę. Jeśliexprocenia nanull, wyrażenie zwracanull.min_valueimax_valueto wyrażenia, które rozwiązują się do punktów końcowych dopuszczalnego zakresu dlaexpr. Oba te wyrażenia muszą również szacować się na wartości liczbowe lub daty i godziny i żadne z nich nie może szacować nanull.num_bucketsto wyrażenie, które rozwiązuje się do stałej wskazującej liczbę wiader. To wyrażenie musi dać w wyniku dodatnią liczbę całkowitą.
Przykład
Oto przykład pokazujący, jak to działa.
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; Wynik:
R1 R2 R3
_____ _____ _____
1 2 3 Oto wyjaśnienie. Zbadajmy każdy argument, zaczynając od ostatniego i pracując wstecz do pierwszego.
- Czwarty argument :Podaję trzy wiadra. Robię to za pomocą
3jako czwarty argument. - Drugi i trzeci argument :określam, że zakres wynosi od 1 do 12. W tym przypadku moim drugim argumentem jest
1a trzecim argumentem jest12. - Pierwszy argument :Ta wartość jest porównywana z drugim i trzecim argumentem, aby wiedzieć, do którego z trzech segmentów powinna być przypisana. W moim przykładzie wywołuję
WIDTH_BUCKET()trzy razy, aby lepiej zilustrować tę koncepcję. Robię to, aby jako pierwszy argument podać trzy różne wartości, z których każda jest przypisana do innego zasobnika.
Poniższa tabela przedstawia inny sposób wizualizacji tego:
| Wartości | Wiadro |
|---|---|
| 1, 2, 3, 4 | Wiaderko 1 |
| 5, 6, 7, 8 | Wiadro 2 |
| 9, 10, 11, 12 | Wiaderko 3 |
Widzimy więc, że pierwsze wiaderko przyjmuje wartości od 1 do 4, drugie wiadro od 5 do 8, a trzecie wiaderko jest przeznaczone na wartości od 9 do 12.
Gdybym miał to zmienić tak, aby były cztery wiadra, mój kod mógłby wyglądać mniej więcej tak:
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; A stół wyglądałby tak:
| Wartości | Wiadro |
|---|---|
| 1, 2, 3 | Wiaderko 1 |
| 4, 5, 6 | Wiaderko 2 |
| 7, 8, 9 | Wiaderko 3 |
| 10, 11, 12 | Wiadro 4 |
Oto kolejny przykład, w którym zmieniają się tylko rozmiary wiader:
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; Wynik:
R1 R2 R3
_____ _____ _____
2 3 4 Poza zasięgiem
Jeśli dane wejściowe są poza zakresem zasobnika, otrzymasz 0 lub num_buckets +1, w zależności od tego, czy wejście znajduje się poniżej zakresu, czy powyżej. W takich przypadkach Oracle Database tworzy zasobnik niedomiaru o numerze 0 i wiadro przelewowe o numerze num_buckets +1.
Przykład:
SELECT
WIDTH_BUCKET(-3, 1, 12, 3),
WIDTH_BUCKET(20, 1, 12, 3)
FROM DUAL; Wynik:
WIDTH_BUCKET(-3,1,12,3) WIDTH_BUCKET(20,1,12,3)
__________________________ __________________________
0 4