- 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¶
Ausdruck
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.Minimumwert
undMaximumwert
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(Maximumwert - Minimumwert) < 2^53
).Anzahl_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 alsMinimumwert
ist.Anzahl_Buckets + 1
, wenn der Ausdruck größer oder gleichMaximumwert
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 | +------------+-----------+-------------+