Analytické funkce

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 ORDERBY klauzule. Všechny spoje a všechny WHEREGROUPBYHAVING doložky jsou dokončeny před analytických funkcí jsou zpracovány. Proto se analytické funkce mohou objevit pouze v seznamu select nebo ORDERBY 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 analytic_function.gif následuje

popis obrázku “ analytic_function.gif“

analytic_clause::=

Popis analytic_clause.gif následuje

popis obrázku “ analytic_clause.gif“

query_partition_clause::=

Popis query_partition_clause.gif následuje
popis obrázku “ query_partition_clause.gif“

order_by_clause::=

Popis order_by_clause.gif následuje

popis obrázku “ order_by_clause.gif“

windowing_clause ::=

Popis windowing_clause.gif následuje

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 OVERanalytic_clause to indicate that the function operates on a query result set. This clause is computed after the FROMWHEREGROUPBY, and HAVING clauses. Analytické funkce můžete zadat pomocí této klauzule v seznamu select nebo ORDERBY 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 OVERanalytic_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í PARTITIONBY 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 PARTITIONBY.

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_DISTDENSE_RANKNTILEPERCENT_RANKRANK 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é, pokud ORDERBY 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 slovem ROWS, výsledek je nedeterministický.

omezení objednávky podle klauzule následující omezení platí pro klauzuli ORDERBY :

  • Při použití v analytické funkce, order_by_clause musí mít výraz (expr). Klíčové slovo SIBLINGS není platné (je relevantní pouze v hierarchických dotazech). Pozice (position) a aliasy sloupců (c_alias) jsou také neplatné. Jinak je tento order_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 its ORDERBY clause if it specifies any of the following windows:

    • RANGEBETWEENUNBOUNDEDPRECEDINGANDCURRENTROW. The short form of this is RANGEUNBOUNDEDPRECEDING.

    • RANGEBETWEENCURRENTROWANDUNBOUNDEDFOLLOWING

    • RANGEBETWEENCURRENTROWANDCURRENTROW

    • RANGEBETWEENUNBOUNDEDPRECEDINGANDUNBOUNDEDFOLLOWING

    Okna hranice jiné než tyto čtyři může mít pouze jeden klíč řazení v ORDERBY klauzule analytické funkce. Toto omezení se nevztahuje na hranice oken zadané klíčovým slovem ROW.

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í.

NULLSLAST je výchozí pro vzestupném pořadí, a NULLSFIRST 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 BETWEENAND 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 UNBOUNDEDPRECEDING 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Í UNBOUNDEDFOLLOWING 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, CURRENTROW 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_exprPRECEDING.

Jako konečný bod, CURRENTROW 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_exprFOLLOWING.

value_expr PŘEDCHOZÍ nebo value_expr NÁSLEDUJÍCÍ RANGE nebo ROW:

  • Pokud value_exprFOLLOWING je počáteční bod pak koncový bod musí být value_exprFOLLOWING.

  • Pokud value_exprPRECEDING je koncový bod, pak počáteční bod musí být value_exprPRECEDING.

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, pak ORDERBYexpr musí být číselné nebo DATE datový typ.

  • If value_expr evaluates to an interval value, then the ORDERBYexpr must be a DATE data type.

If you omit the windowing_clause entirely, then the default is RANGEBETWEENUNBOUNDEDPRECEDINGANDCURRENTROW.

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í

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *