Oracle
 sql >> Datenbank >  >> RDS >> Oracle

WIDTH_BUCKET()-Funktion in Oracle

In Oracle der WIDTH_BUCKET() Mit der Funktion können Sie Histogramme gleicher Breite erstellen, bei denen der Histogrammbereich in Intervalle gleicher Größe unterteilt ist.

Für einen gegebenen Ausdruck WIDTH_BUCKET() gibt die Bucket-Nummer zurück, in die der Wert dieses Ausdrucks fallen würde, nachdem er ausgewertet wurde.

Syntax

Die Syntax sieht so aus:

WIDTH_BUCKET(expr, min_value, max_value, num_buckets)

Wo:

  • expr ist der Ausdruck, für den das Histogramm erstellt wird. Dieser Ausdruck muss zu einem numerischen oder datetime-Wert oder zu einem Wert ausgewertet werden, der implizit in einen numerischen oder datetime-Wert konvertiert werden kann. Wenn expr wird zu null ausgewertet , dann gibt der Ausdruck null zurück .
  • min_value und max_value sind Ausdrücke, die zu den Endpunkten des akzeptablen Bereichs für expr aufgelöst werden . Beide Ausdrücke müssen auch zu numerischen oder datetime-Werten ausgewertet werden, und keiner kann zu null ausgewertet werden .
  • num_buckets ist ein Ausdruck, der in eine Konstante aufgelöst wird, die die Anzahl der Buckets angibt. Dieser Ausdruck muss eine positive ganze Zahl ergeben.

Beispiel

Hier ist ein Beispiel, um zu demonstrieren, wie es funktioniert.

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;

Ergebnis:

   R1    R2    R3 
_____ _____ _____ 
    1     2     3 

Hier ist eine Erklärung. Lassen Sie uns jedes Argument untersuchen, beginnend mit dem letzten und rückwärts zum ersten arbeiten.

  • Viertes Argument :Ich gebe drei Eimer an. Ich mache das mit 3 als viertes Argument.
  • Zweites und drittes Argument :Ich gebe an, dass der Bereich zwischen 1 und 12 liegt. In diesem Fall ist mein zweites Argument 1 und das dritte Argument ist 12 .
  • Erstes Argument :Dieser Wert wird mit dem zweiten und dritten Argument verglichen, um zu wissen, welchem ​​der drei Buckets er zugewiesen werden soll. In meinem Beispiel rufe ich WIDTH_BUCKET() auf dreimal, um das Konzept besser zu veranschaulichen. Ich tue dies, damit ich als erstes Argument drei verschiedene Werte angeben kann, von denen jeder einem anderen Bucket zugewiesen ist.

Die folgende Tabelle bietet eine andere Möglichkeit, dies zu visualisieren:

Werte Eimer
1, 2, 3, 4 Eimer 1
5, 6, 7, 8 Eimer 2
9, 10, 11, 12 Eimer 3

Wir können also sehen, dass der erste Bucket Werte zwischen 1 und 4 akzeptiert, der zweite Bucket zwischen 5 und 8 und der dritte Bucket Werte zwischen 9 und 12.

Wenn ich es so ändern würde, dass es vier Buckets gäbe, könnte mein Code etwa so aussehen:

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;

Und die Tabelle würde so aussehen:

Werte Eimer
1, 2, 3 Eimer 1
4, 5, 6 Eimer 2
7, 8, 9 Eimer 3
10, 11, 12 Eimer 4

Hier ist ein weiteres Beispiel, in dem sich nur die Bucket-Größen ändern:

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;

Ergebnis:

   R1    R2    R3 
_____ _____ _____ 
    2     3     4 

Außer Reichweite

Wenn die Eingabe außerhalb des Bucket-Bereichs liegt, erhalten Sie entweder 0 oder num_buckets +1, je nachdem, ob der Eingang unterhalb oder oberhalb des Bereichs liegt. In solchen Fällen erstellt Oracle Database einen Unterlauf-Bucket mit der Nummer 0 und ein Überlauf-Bucket mit der Nummer num_buckets +1.

Beispiel:

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

Ergebnis:

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