analytické funkce vypočítají souhrnnou hodnotu na základě skupiny řádků. Liší se od agregovaných funkcí tím, že pro každou skupinu vracejí více řádků. Skupina řádků se nazývá okno a je definována analytic_clause
. Pro každý řádek je definováno posuvné okno řádků. Okno určuje rozsah řádků použitých k provádění výpočtů pro aktuální řádek. Velikost okna může být založena buď na fyzickém počtu řádků, nebo na logickém intervalu, jako je čas.
Analytické funkce jsou poslední sadu operací prováděných v dotazu, s výjimkou konečných ORDER
BY
klauzule. Všechny spoje a všechny WHERE
GROUP
BY
HAVING
doložky jsou dokončeny před analytických funkcí jsou zpracovány. Proto se analytické funkce mohou objevit pouze v seznamu select nebo ORDER
BY
klauzule.
analytické funkce se běžně používají k výpočtu kumulativních, pohyblivých, centrovaných a reportingových agregátů.
analytic_function::=
popis obrázku “ analytic_function.gif“
analytic_clause::=
popis obrázku “ analytic_clause.gif“
query_partition_clause::=
popis obrázku “ query_partition_clause.gif“
order_by_clause::=
popis obrázku “ order_by_clause.gif“
windowing_clause ::=
popis obrázku “ windowing_clause.gif „
sémantika této syntaxe je popsána v následujících sekcích.
analytic_function
Zadejte název analytické funkce (viz seznam analytických funkcí po této diskusi o sémantice).
argumenty
analytické funkce berou 0 až 3 argumenty. Argumenty mohou být jakýkoli číselný datový typ nebo jakýkoli nonnumerický datový typ, který lze implicitně převést na číselný datový typ. Oracle určuje argument s nejvyšší číselnou prioritou a implicitně převádí zbývající argumenty na tento datový typ. Návratový typ je také tento datový typ, pokud není pro jednotlivé funkce uvedeno jinak.
Viz také:
„Numeric Precedence“ for information on numeric precedence and Table 3-10, „Implicit Type Conversion Matrix“ for more information on implicit conversion
analytic_clause
Use OVER
analytic_clause
to indicate that the function operates on a query result set. This clause is computed after the FROM
WHERE
GROUP
BY
, and HAVING
clauses. Analytické funkce můžete zadat pomocí této klauzule v seznamu select nebo ORDER
BY
klauzule. Chcete-li filtrovat výsledky dotazu na základě analytické funkce, vložte tyto funkce do nadřazeného dotazu a poté filtrujte výsledky vnořeného poddotazu.
Poznámky na analytic_clause: následující poznámky se vztahují na analytic_clause
:
-
nelze hnízdo analytické funkce zadáním jakékoli analytické funkce v jakékoli části
analytic_clause
. V poddotazu však můžete určit analytickou funkci a vypočítat nad ní jinou analytickou funkci. -
můžete zadat
OVER
analytic_clause
pomocí uživatelsky definovaných analytických funkcí a vestavěných analytických funkcí. Viz vytvořit funkci.
query_partition_clause
Použití PARTITION
BY
klauzule partition dotazu sada výsledků do skupin na základě jednoho nebo více value_expr
. Pokud tuto klauzuli vynecháte, funkce zachází se všemi řádky výsledku dotazu nastavenými jako s jednou skupinou.
Chcete-li použít query_partition_clause
v analytické funkci, použijte horní větev syntaxe (bez závorek). Použití tohoto ustanovení v modelu dotazu (v model_column_clauses
), nebo rozdělených vnější spojení (v outer_join_clause
), použijte spodní větve syntaxe (se závorkami).
ve stejném dotazu můžete zadat více analytických funkcí, z nichž každá má stejné nebo odlišné klíče PARTITION
BY
.
pokud mají dotazované objekty atribut parallel a pokud zadáte analytickou funkci s query_partition_clause
, pak jsou výpočty funkcí také paralelizovány.
platné hodnoty value_expr
jsou konstanty, sloupce, neanalytické funkce, funkční výrazy nebo výrazy zahrnující některou z nich.
order_by_clause
pomocí order_by_clause
určete, jak jsou data uspořádána v rámci oddílu. Pro všechny analytické funkce si můžete objednat hodnot v oddílu na více klíčů, je každý definován pomocí value_expr
a každé kvalifikaci objednání sekvence.
v rámci každé funkce můžete zadat více pořadových výrazů. To je zvláště užitečné při použití funkcí, které hodnotí hodnoty, protože druhý výraz může vyřešit vazby mezi stejnými hodnotami pro první výraz.
kdykoli má order_by_clause
za následek stejné hodnoty pro více řádků, funkce se chová následovně:
-
CUME_DIST
DENSE_RANK
NTILE
PERCENT_RANK
RANK
vrátí stejný výsledek pro každý z řádků. -
ROW_NUMBER
přiřadí každé řadě odlišné hodnoty, i když tam je kravatu na základěorder_by_clause
. Hodnota je založena na pořadí, ve kterém řádku je zpracován, což může být nedeterministické, pokudORDER
BY
nezaručuje celkové objednávce. -
u všech ostatních analytických funkcí závisí výsledek na specifikaci okna. Pokud zadáte logické okno s klíčovým slovem
RANGE
, funkce vrátí stejný výsledek pro každý z řádků. Pokud zadáte fyzické okno s klíčovým slovemROWS
, výsledek je nedeterministický.
omezení objednávky podle klauzule následující omezení platí pro klauzuli ORDER
BY
:
-
Při použití v analytické funkce,
order_by_clause
musí mít výraz (expr
). Klíčové slovoSIBLINGS
není platné (je relevantní pouze v hierarchických dotazech). Pozice (position
) a aliasy sloupců (c_alias
) jsou také neplatné. Jinak je tentoorder_by_clause
stejný jako ten, který se používá k objednání celkového dotazu nebo poddotazu. -
An analytic function that uses the
RANGE
keyword can use multiple sort keys in itsORDER
BY
clause if it specifies any of the following windows:-
RANGE
BETWEEN
UNBOUNDED
PRECEDING
AND
CURRENT
ROW
. The short form of this isRANGE
UNBOUNDED
PRECEDING
. -
RANGE
BETWEEN
CURRENT
ROW
AND
UNBOUNDED
FOLLOWING
-
RANGE
BETWEEN
CURRENT
ROW
AND
CURRENT
ROW
-
RANGE
BETWEEN
UNBOUNDED
PRECEDING
AND
UNBOUNDED
FOLLOWING
Okna hranice jiné než tyto čtyři může mít pouze jeden klíč řazení v
ORDER
BY
klauzule analytické funkce. Toto omezení se nevztahuje na hranice oken zadané klíčovým slovemROW
. -
asc / DESC určuje pořadí pořadí (vzestupně nebo sestupně). ASC
je výchozí.
NULLS FIRST / NULLS LAST určuje, zda se vrácené řádky obsahující nuly mají objevit jako první nebo poslední v pořadí pořadí.
NULLS
LAST
je výchozí pro vzestupném pořadí, a NULLS
FIRST
je výchozí pro sestupném pořadí.
analytické funkce pracují vždy na řádcích v pořadí uvedeném v order_by_clause
funkce. order_by_clause
funkce však nezaručuje pořadí výsledku. Použijte order_by_clause
dotazu k zajištění konečného pořadí výsledků.
Viz Také:
order_by_clause VYBERTE pro více informací o této klauzuli
windowing_clause
Některé analytické funkce umožňují windowing_clause
. V seznamu analytických funkcí na konci této části, funkce, které umožňují windowing_clause
následuje hvězdička (*).
řádky / rozsah tato klíčová slova definují pro každý řádek okno (fyzickou nebo logickou sadu řádků) použité pro výpočet výsledku funkce. Funkce se pak použije na všechny řádky v okně. Okno se pohybuje přes sadu výsledků dotazu nebo oddíl shora dolů.
-
ROWS
určuje okno ve fyzických jednotkách (řádcích). -
RANGE
určuje okno jako logický offset.
tuto klauzuli nelze zadat, pokud jste nezadali order_by_clause
. Některé okna hranice definována RANGE
klauzule umožňují zadat pouze jeden výraz v order_by_clause
. Viz „Omezení objednávky podle klauzule“.
hodnota vrácená analytickou funkcí s logickým posunem je vždy deterministická. Nicméně, hodnota vrácené analytické funkce s fyzickou offset může produkovat nedeterministické výsledky, pokud v objednávce vyjádření výsledků v jedinečné uspořádání. Možná budete muset zadat více sloupců v order_by_clause
, abyste dosáhli tohoto jedinečného uspořádání.
mezi … A použijte BETWEEN
AND
klauzule pro zadání počátečního a koncového bodu okna. První výraz (před AND
) definuje počáteční bod a druhý výraz (AND
) definuje koncový bod.
Pokud vynecháte BETWEEN
a zadat pouze jeden koncový bod, pak Oracle považuje za počáteční bod a koncový bod výchozí hodnota pro aktuální řádek.
NESPOUTANÝ PŘEDCHOZÍ Zadat UNBOUNDED
PRECEDING
naznačují, že okno začíná na prvním řádku oddílu. Toto je SPECIFIKACE počátečního bodu a nelze ji použít jako specifikaci koncového bodu.
NESPOUTANÝ Zadejte NÁSLEDUJÍCÍ UNBOUNDED
FOLLOWING
uvést, že okno končí v posledním řádku oddílu. Toto je SPECIFIKACE koncového bodu a nelze jej použít jako specifikaci počátečního bodu.
AKTUÁLNÍ ŘÁDEK Jako výchozí bod, CURRENT
ROW
určuje, že okno začíná na aktuálním řádku nebo hodnoty (v závislosti na tom, zda jste zadali ROW
nebo RANGE
, v uvedeném pořadí). V tomto případě nemůže být koncový bod value_expr
PRECEDING
.
Jako konečný bod, CURRENT
ROW
určuje, že okno končí v aktuálním řádku nebo hodnoty (v závislosti na tom, zda jste zadali ROW
nebo RANGE
, v uvedeném pořadí). V tomto případě nemůže být počáteční bod value_expr
FOLLOWING
.
value_expr PŘEDCHOZÍ nebo value_expr NÁSLEDUJÍCÍ RANGE
nebo ROW
:
-
Pokud
value_expr
FOLLOWING
je počáteční bod pak koncový bod musí býtvalue_expr
FOLLOWING
. -
Pokud
value_expr
PRECEDING
je koncový bod, pak počáteční bod musí býtvalue_expr
PRECEDING
.
pokud definujete logické okno definované časovým intervalem v číselném formátu, možná budete muset použít konverzní funkce.
Viz také:
NUMTOYMINTERVAL a NUMTODSINTERVAL pro informace o převodu číselné krát v intervalech
Pokud jste zadali ROWS
:
-
value_expr
je fyzický posun. Musí to být konstanta nebo výraz a musí vyhodnotit na kladnou číselnou hodnotu. -
Pokud
value_expr
je součástí počátečního bodu, pak musí vyhodnotit na řádek před koncovým bodem.
Pokud jste zadali RANGE
:
-
value_expr
je logický posun. Musí to být konstanta nebo výraz, který hodnotí kladnou číselnou hodnotu nebo intervalový doslov. Informace o intervalových literálech najdete v části „literály“. -
můžete zadat pouze jeden výraz v
order_by_clause
. -
Pokud
value_expr
hodnotí číselnou hodnotu, pakORDER
BY
expr
musí být číselné neboDATE
datový typ. -
If
value_expr
evaluates to an interval value, then theORDER
BY
expr
must be aDATE
data type.
If you omit the windowing_clause
entirely, then the default is RANGE
BETWEEN
UNBOUNDED
PRECEDING
AND
CURRENT
ROW
.
Analytic functions are commonly used in data warehousing environments. V následujícím seznamu analytických funkcí umožňují funkce následované hvězdičkou ( * ) úplnou syntaxi, včetně windowing_clause
.
AVG *
CORR *
POČÍTAT *
COVAR_POP *
COVAR_SAMP *
CUME_DIST
DENSE_RANK
FIRST_VALUE *
ZPOŽDĚNÍ
POSLEDNÍ
LAST_VALUE *
LEAD
LISTAGG
MAX *
STŘEDNÍ
MIN *
NTH_VALUE *
NTILE
PERCENT_RANK
PERCENTILE_CONT
PERCENTILE_DISC
UMÍSTĚNÍ
RATIO_TO_REPORT
REGR_ (Lineární Regrese) Funkce *
ROW_NUMBER
STDDEV *
STDDEV_POP *
STDDEV_SAMP *
SOUČET *
VAR_POP *
VAR_SAMP *
ROZPTYL *
Viz Také:
Oracle Databáze Datových Skladů Průvodce pro více informací o těchto funkcích a pro scénáře ilustruje jejich použití