sql >> Databáze >  >> RDS >> Oracle

Funkce WIDTH_BUCKET() v Oracle

V Oracle, WIDTH_BUCKET() Funkce umožňuje konstruovat histogramy ekvišířky, ve kterých je rozsah histogramu rozdělen na intervaly, které mají stejnou velikost.

Pro daný výraz WIDTH_BUCKET() vrátí číslo segmentu, do kterého by po vyhodnocení spadla hodnota tohoto výrazu.

Syntaxe

Syntaxe vypadá takto:

WIDTH_BUCKET(expr, min_value, max_value, num_buckets) 

Kde:

  • expr je výraz, pro který se histogram vytváří. Tento výraz se musí vyhodnotit jako číselná hodnota nebo hodnota datetime nebo hodnota, kterou lze implicitně převést na číselnou hodnotu nebo hodnotu datetime. Pokud expr vyhodnotí jako null , pak výraz vrátí null .
  • min_value a max_value jsou výrazy, které se rozlišují na koncové body přijatelného rozsahu pro expr . Oba tyto výrazy se také musí vyhodnotit jako číselné hodnoty nebo hodnoty data a času a ani jeden nemůže být vyhodnocen jako null .
  • num_buckets je výraz, který se převádí na konstantu udávající počet segmentů. Tento výraz musí být vyhodnocen jako kladné celé číslo.

Příklad

Zde je příklad demonstrující, jak to funguje.

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; 

Výsledek:

 R1 R2 R3 _____ _____ _____ 1 2 3 

Zde je vysvětlení. Prozkoumejme každý argument, začněme od posledního a postupujeme zpět k prvnímu.

  • Čtvrtý argument :Uvádím tři kbelíky. Dělám to pomocí 3 jako čtvrtý argument.
  • Druhý a třetí argument :Uvádím, že rozsah je mezi 1 a 12. V tomto případě je můj druhý argument 1 a třetí argument je 12 .
  • První argument :Tato hodnota se porovnává s druhým a třetím argumentem, abychom věděli, ke kterému ze tří segmentů má být přiřazena. V mém příkladu volám WIDTH_BUCKET() třikrát, aby byl koncept lépe ilustrován. Dělám to proto, abych jako první argument mohl uvést tři různé hodnoty, z nichž každá je přiřazena k jinému segmentu.

Následující tabulka poskytuje další způsob vizualizace:

Hodnoty Kbelík
1, 2, 3, 4 Segment 1
5, 6, 7, 8 Segment 2
9, 10, 11, 12 Segment 3

Vidíme tedy, že první segment přijímá hodnoty mezi 1 a 4, druhý segment mezi 5 a 8 a třetí segment je pro hodnoty mezi 9 a 12.

Pokud bych to změnil tak, aby byly čtyři segmenty, můj kód by mohl vypadat nějak takto:

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 tabulka by vypadala takto:

Hodnoty Kbelík
1, 2, 3 Segment 1
4, 5, 6 Segment 2
7, 8, 9 Segment 3
10, 11, 12 Segment 4

Zde je další příklad, ve kterém se mění pouze velikosti segmentů:

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; 

Výsledek:

 R1 R2 R3 _____ _____ _____ 2 3 4 

Mimo rozsah

Pokud je vstup mimo rozsah segmentu, dostanete buď 0 nebo num_buckets +1, podle toho, zda je vstup pod rozsahem nebo nad ním. V takových případech Oracle Database vytvoří podtečený segment s číslem 0 a přepadový segment očíslovaný num_buckets +1.

Příklad:

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

Výsledek:

 WIDTH_BUCKET(-3,1,12,3) WIDTH_BUCKET(20,1,12,3) ___________________________ ___________________________ 0 0 
  1. Přejmenování primárního klíče v SQL Server (T-SQL)

  2. Jak spustit příkaz MySQL ze skriptu shellu?

  3. Jak mohu opravit chybu zatížení MySQL

  4. Vnitřní spojení tří stolů