Oracle
 sql >> Baza danych >  >> RDS >> Oracle

WIDTH_BUCKET() Funkcja w Oracle

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:

  • expr to 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śli expr ocenia na null , wyrażenie zwraca null .
  • min_value i max_value to wyrażenia, które rozwiązują się do punktów końcowych dopuszczalnego zakresu dla expr . 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ć na null .
  • num_buckets to 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ą 3 jako czwarty argument.
  • Drugi i trzeci argument :określam, że zakres wynosi od 1 do 12. W tym przypadku moim drugim argumentem jest 1 a trzecim argumentem jest 12 .
  • 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 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-00932:niespójne typy danych:oczekiwano - uzyskano CLOB

  2. jak wybrać listę 10 000 unikalnych identyfikatorów z dual w Oracle SQL

  3. Ustawienie NLS_NUMERIC_CHARACTERS dla dziesiętnych

  4. Najlepszy wzorzec projektowy do zamykania połączenia z bazą danych w przypadku wystąpienia wyjątku

  5. Warunkowa SUMA na Oracle