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. Wennexpr
wird zunull
ausgewertet , dann gibt der Ausdrucknull
zurück .min_value
undmax_value
sind Ausdrücke, die zu den Endpunkten des akzeptablen Bereichs fürexpr
aufgelöst werden . Beide Ausdrücke müssen auch zu numerischen oder datetime-Werten ausgewertet werden, und keiner kann zunull
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 ist12
. - 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