- Kategorien:
WIDTH_BUCKET¶
Konstruiert Equi-Width-Histogramme, bei denen der Histogrammbereich in Intervalle gleicher Größe unterteilt ist, und gibt die Bucket-Nummer zurück, in die der Wert eines Ausdrucks nach dessen Auswertung fällt. Die Funktion gibt einen ganzzahligen Wert oder Null zurück (wenn eine Eingabe Null ist).
Syntax¶
WIDTH_BUCKET( <expr> , <min_value> , <max_value> , <num_buckets> )
Argumente¶
expr
Der Ausdruck, für den das Histogramm erstellt wird. Dieser Ausdruck muss einen numerischen Wert oder einen Wert ergeben, der implizit in einen numerischen Wert konvertiert werden kann.
Der Wert muss im Bereich von
-(2^53 - 1)
bis2^53 - 1
(inklusive) liegen.min_value
undmax_value
Die unteren und oberen Endpunkte des akzeptablen Bereichs für den Ausdruck. Die Endpunkte müssen auch numerische Werte ergeben und dürfen nicht gleich sein.
Unterer und oberer Endpunkt müssen im Bereich von
-(2^53 - 1)
bis2^53 - 1
(einschließlich) liegen. Außerdem muss die Differenz zwischen diesen Punkten kleiner sein als2^53
(d. h.abs(max_value - min_value) < 2^53
).num_buckets
Die gewünschte Anzahl an Buckets; muss ein positiver ganzzahliger Wert sein. Jedem Bucket wird ein Wert aus dem Ausdruck zugewiesen, und die Funktion gibt dann die entsprechende Bucket-Zahl zurück.
Wenn ein Ausdruck außerhalb des Bereichs liegt, gibt die Funktion Folgendes zurück:
0
, wenn der Ausdruck kleiner alsmin_value
ist.num_buckets + 1
, wenn der Ausdruck größer oder gleichmax_value
ist.
Beispiel¶
Erstellen Sie in der Spalte price
ein Vier-Bucket-Histogramm für verkaufte Häuser im Preisbereich von 200.000–600.000 USD, sortiert nach Verkaufsdatum. Die Funktion gibt die Bucket-Zahl (SALES GROUP
) für jeden Wert in der Gruppe zurück.
Erstellen Sie eine Tabelle, und füllen Sie diese:
CREATE TABLE home_sales ( sale_date DATE, price NUMBER(11, 2) ); INSERT INTO home_sales (sale_date, price) VALUES ('2013-08-01'::DATE, 290000.00), ('2014-02-01'::DATE, 320000.00), ('2015-04-01'::DATE, 399999.99), ('2016-04-01'::DATE, 400000.00), ('2017-04-01'::DATE, 470000.00), ('2018-04-01'::DATE, 510000.00);Fragen Sie die Tabelle ab, indem Sie WIDTH_BUCKET() aufrufen:
SELECT sale_date, price, WIDTH_BUCKET(price, 200000, 600000, 4) AS "SALES GROUP" FROM home_sales ORDER BY sale_date; +------------+-----------+-------------+ | SALE_DATE | PRICE | SALES GROUP | |------------+-----------+-------------| | 2013-08-01 | 290000.00 | 1 | | 2014-02-01 | 320000.00 | 2 | | 2015-04-01 | 399999.99 | 2 | | 2016-04-01 | 400000.00 | 3 | | 2017-04-01 | 470000.00 | 3 | | 2018-04-01 | 510000.00 | 4 | +------------+-----------+-------------+