Wenn Sie diese Meldung sehen, hat Ihr Browser entweder deaktiviert oder unterstützt kein JavaScript. Um die vollständigen Funktionen dieses Hilfesystems, z. B. die Suche, nutzen zu können, muss Ihr Browser JavaScript-Unterstützung aktiviert haben. Weighted Moving Averages Mit Simple Moving Averages wird jeder Datenwert in dem Windowquot, in dem die Berechnung durchgeführt wird, eine gleiche Bedeutung oder Gewicht zugewiesen. Es ist oft der Fall, vor allem in der Finanzdaten-Daten-Analyse, dass mehr chronologisch jüngsten Daten ein größeres Gewicht tragen sollte. In diesen Fällen wird der gewichtete gleitende Durchschnitt (oder der exponentielle gleitende Durchschnitt - siehe das folgende Thema) häufig bevorzugt. Betrachten Sie die gleiche Tabelle der Verkaufsdatenwerte für zwölf Monate: Um einen gewichteten gleitenden Durchschnitt zu berechnen: Berechnen Sie, wie viele Intervalle von Daten an der Moving Average Berechnung beteiligt sind (d. h. die Größe des rechnerischen Windowquot). Wenn das Berechnungsfenster n ist, wird der jüngste Datenwert in dem Fenster mit n multipliziert, der nächstletzte multipliziert mit n-1, der Wert vor dem multipliziert mit n-2 und so weiter für alle Werte im Fenster. Teilen Sie die Summe aller multiplizierten Werte durch die Summe der Gewichte, um den gewichteten gleitenden Durchschnitt über diesem Fenster zu erhalten. Stellen Sie den Weighted Moving Average-Wert in eine neue Spalte entsprechend der oben beschriebenen Positionierung der mittleren Mittelwerte ein. Um diese Schritte zu veranschaulichen, sollten Sie berücksichtigen, ob ein dreimonatiger gewichteter gleitender Durchschnitt der Verkäufe im Dezember erforderlich ist (unter Verwendung der obigen Tabelle der Verkaufswerte). Der Begriff "3-monthquot" impliziert, dass das Berechnungsfenster für den Windowquot 3 ist, daher sollte der Algorithmus für den Weighted Moving Average-Berechnungsfaktor für diesen Fall sein: Oder, wenn ein 3-Monats-Weighted Moving Average über den gesamten ursprünglichen Datenbereich ausgewertet würde : 3-Monats-gewichtetes Moving AverageHow, um einen SQL-Moving-Average ohne Cursor-Aktualisierung zu berechnen: Wenn Sie mit den neuesten Versionen von SQL Server arbeiten, können Sie die Fensterfunktionen verwenden, um dasselbe zu erreichen. Ich habe den aktualisierten Code am Ende der Post. Für dieses Video, Ich mag immer noch den Gedanken Prozess der Verankerung zu einem Datum. Video: 3-Tage-Moving-Average in SQL Eine effiziente Methode, um einen gleitenden Durchschnitt in SQL mit Hilfe einiger Tricks zu berechnen, um Datum-Anker festzulegen. Es gibt Debatten über den besten Weg, um einen SQL Moving Average in SQL Server zu tun. Einige Leute denken, es gibt Zeiten, wenn ein Cursor am effizientesten ist. Andere denken, dass Sie alles in einer Set-basierte Weise ohne den Cursor tun können. Neulich wollte ich einen gleitenden Durchschnitt berechnen und mein erster Gedanke war, einen Cursor zu benutzen. Ich habe einige schnelle Forschung und fand dieses Forum Frage: Moving Average in TSQL Es gibt einen Beitrag, der eine Unterabfrage mit einem Anker Datum, um zu finden, die 1 und 2-Tage-Offset zeigt. Hier ist das Skript, das Sie verwenden können, um die 3 Tage SQL Moving Average Endresultat zu testen. Hier ist die abschließende Frage. Hier ist die Abfrage, die Sie mit SQL Server 2012 verwenden würden. Freigeben: 21 SQL für Analyse und Reporting Behandlung von NULLs als Eingabe für Fensterfunktionen Fensterfunktionen NULL-Semantik stimmt mit den NULL-Semantiken für SQL-Aggregatfunktionen überein. Andere Semantiken können durch benutzerdefinierte Funktionen oder durch Verwendung des DECODE - oder CASE-Ausdrucks innerhalb der Fensterfunktion erhalten werden. Windowing-Funktionen mit logischem Offset Ein logischer Offset kann mit Konstanten wie RANGE 10 PRECEDING angegeben werden. Oder einen Ausdruck, der eine Konstante oder eine Intervallspezifikation wie RANGE INTERVAL N DAY / MONTH / YEAR PRECEDING oder einen Ausdruck, der ein Intervall auswertet, auswertet. Bei logischem Offset kann es nur einen Ausdruck in der Ausprägungsliste ORDER BY in der Funktion geben, wobei der Typ NUMERIC kompatibel ist, wenn der Offset numerisch ist, oder DATE, wenn ein Intervall angegeben ist. Beispiel 21-7 Kumulative Aggregatfunktion Nachfolgend ein Beispiel für kumulative Beträge nach Kundennummer pro Quartal 1999: In diesem Beispiel definiert die analytische Funktion SUM für jede Zeile ein Fenster, das am Anfang der Partition beginnt (UNBOUNDED PRECEDING ) Und endet standardmäßig in der aktuellen Zeile. Nested SUM s werden in diesem Beispiel benötigt, da wir einen SUM über einen Wert ausführen, der selbst ein SUM ist. Verschachtelte Aggregationen werden sehr oft in analytischen Aggregatfunktionen verwendet. Beispiel 21-8 Moving Aggregate-Funktion Dieses Beispiel eines zeitbasierten Fensters zeigt für einen Kunden den gleitenden Durchschnitt der Umsätze für den aktuellen Monat und die vorangegangenen zwei Monate an: Beachten Sie, dass die ersten beiden Zeilen für die dreimonatige gleitende Durchschnittsberechnung im Ausgabedaten basieren auf einer kleineren Intervallgröße als angegeben, da die Fensterberechnung die von der Abfrage abgerufenen Daten nicht überschreiten kann. Sie müssen die verschiedenen Fenstergrößen berücksichtigen, die an den Rändern der Ergebnismengen gefunden werden. Mit anderen Worten, müssen Sie die Abfrage ändern, um genau das, was Sie wollen, zu ändern. Zentrierte Aggregatfunktion Die Berechnung von Fenster-Aggregatfunktionen, die um die aktuelle Zeile zentriert sind, ist einfach. In diesem Beispiel wird für alle Kunden ein zentrierter gleitender Durchschnitt des Umsatzes für eine Woche Ende Dezember 1999 berechnet. Er ermittelt einen Durchschnitt der Verkaufssumme für den einen Tag vor der aktuellen Zeile und einen Tag nach der aktuellen Zeile einschließlich der aktuellen Zeile. Beispiel 21-9 Zentriertes Aggregat Die Anfangs - und Endzeilen für jede produktzentrierte gleitende Durchschnittsberechnung in den Ausgabedaten basieren auf nur zwei Tagen, da die Fensterberechnung die von der Abfrage abgerufenen Daten nicht überschreiten kann. Benutzer müssen die verschiedenen Fenstergrößen, die an den Rändern der Ergebnismengen gefunden werden, berücksichtigen: die Abfrage muss möglicherweise angepasst werden. Aggregatfunktionen in Anwesenheit von Duplikaten visualisieren Im folgenden Beispiel wird veranschaulicht, wie Fensteraggregatfunktionen Werte berechnen, wenn Duplikate vorhanden sind, dh wenn mehrere Zeilen für einen einzelnen Auftragswert zurückgegeben werden. Die Abfrage ruft die in einem bestimmten Zeitraum an mehrere Kunden verkaufte Menge ab. (Obwohl wir eine Inline-Ansicht verwenden, um unseren Basisdatensatz zu definieren, hat er keine besondere Bedeutung und kann ignoriert werden.) Die Abfrage definiert ein sich bewegendes Fenster, das vom Datum der aktuellen Zeile bis zu 10 Tagen früher läuft. Beachten Sie das Schlüsselwort RANGE Wird verwendet, um die windowing-Klausel dieses Beispiels zu definieren. Dies bedeutet, dass das Fenster potenziell viele Zeilen für jeden Wert in dem Bereich halten kann. In diesem Fall gibt es drei Paare von Zeilen mit doppelten Datumswerten. Beispiel 21-10 Aktivieren von Aggregatfunktionen mit logischen Offsets In der Ausgabe dieses Beispiels geben alle Daten außer dem 6. Mai und 12. Mai zwei Zeilen mit doppelten Daten zurück. Untersuchen Sie die kommentierten Zahlen rechts neben der Ausgabe, um zu sehen, wie die Werte berechnet werden. Beachten Sie, dass jede Gruppe in Klammern die Werte darstellt, die für einen einzelnen Tag zurückgegeben werden. Beachten Sie, dass dieses Beispiel nur angewendet wird, wenn Sie das Schlüsselwort RANGE anstelle des ROWS-Schlüsselwort verwenden. Es ist auch wichtig, sich daran zu erinnern, dass mit RANGE. Sie können nur 1 ORDER BY-Ausdruck in der analytischen Funktionen ORDER BY-Klausel verwenden. Mit dem ROWS-Schlüsselwort können Sie mehrere Ausdrücke in der analytischen Funktion ORDER BY verwenden. Variable Fenstergröße für jede Zeile Es gibt Situationen, in denen es sinnvoll ist, die Größe eines Fensters für jede Zeile abhängig von einer bestimmten Bedingung zu ändern. Zum Beispiel möchten Sie vielleicht das Fenster größer für bestimmte Termine und kleiner für andere machen. Angenommen, Sie wollen den gleitenden Durchschnitt des Aktienkurses über drei Werktage berechnen. Wenn Sie für jeden Arbeitstag eine gleiche Anzahl von Zeilen für jeden Arbeitstag haben und keine arbeitsfreien Tage gespeichert sind, können Sie eine physikalische Fensterfunktion verwenden. Wenn die angegebenen Bedingungen jedoch nicht erfüllt sind, können Sie trotzdem einen gleitenden Durchschnitt berechnen, indem Sie einen Ausdruck in den Fenstergrößenparametern verwenden. Ausdrücke in einer Fenstergrößenangabe können in mehreren verschiedenen Quellen gemacht werden. Könnte der Ausdruck ein Verweis auf eine Spalte in einer Tabelle sein, z. B. eine Zeittabelle. Es könnte auch eine Funktion sein, die die entsprechende Grenze für das Fenster basierend auf Werten in der aktuellen Zeile zurückgibt. Die folgende Anweisung für eine hypothetische Aktienkursdatenbank verwendet eine benutzerdefinierte Funktion in ihrer RANGE-Klausel, um die Fenstergröße festzulegen: In dieser Anweisung ist ttimekey ein Datumsfeld. Hier könnte fn eine PL / SQL-Funktion mit der folgenden Spezifikation sein: 4 if ttimekey is Monday, Tuesday Wenn einer der vorherigen Tage Urlaube ist, passt er die Zählung entsprechend an. Beachten Sie, dass, wenn Fenster mit einer Zahl in einer Fensterfunktion mit ORDER BY an einer Datumsspalte angegeben wird, dann wird es konvertiert, um die Anzahl der Tage zu bedeuten. Sie könnten auch die Intervall-Literal-Konvertierungsfunktion verwendet haben, da NUMTODSINTERVAL (fn (ttimekey), DAY) statt nur fn (ttimekey) das gleiche bedeutet. Sie können auch eine PL / SQL-Funktion schreiben, die einen INTERVAL-Datentypwert zurückgibt. Windowing Aggregate-Funktionen mit physischen Offsets Für Fenster, die in Zeilen ausgedrückt werden, sollten die Ordnungsausdrücke eindeutig sein, um deterministische Ergebnisse zu erzeugen. Beispielsweise ist die folgende Abfrage nicht deterministisch, da timeid in dieser Ergebnismenge nicht eindeutig ist. Beispiel 21-11 Aktivieren von Aggregatfunktionen mit physischen Offsets Eine Möglichkeit, dieses Problem zu umgehen, wäre, die prodid-Spalte der Ergebnismenge und der Reihenfolge auf timeid und prodid hinzuzufügen. FIRSTVALUE - und LASTVALUE-Funktionen Mit den FIRSTVALUE - und LASTVALUE-Funktionen können Sie die erste und die letzte Zeile eines Fensters auswählen. Diese Zeilen sind besonders wertvoll, weil sie häufig als die Basislinien in Berechnungen verwendet werden. Beispielsweise könnten Sie bei einer Partitionsholding-Verkaufsdaten, die nach dem Tag geordnet sind, fragen, wie viele Tage die Verkäufe im Vergleich zum ersten Verkaufstag (FIRSTVALUE) der Periode oder vielleicht auch für einen Satz von Zeilen im steigenden Kundenauftrag waren , Was war die prozentuale Größe jedes Verkaufs in der Region im Vergleich zum größten Verkauf (LASTVALUE) in der Region Wenn die Option IGNORE NULLS mit FIRSTVALUE verwendet wird. Wird es den ersten Nicht-Nullwert in der Menge zurückgeben, oder NULL, wenn alle Werte NULL sind. Wenn IGNORE NULLS mit LASTVALUE verwendet wird. Gibt es den letzten Nicht-Nullwert in der Menge oder NULL zurück, wenn alle Werte NULL sind. Die Option IGNORE NULLS ist besonders nützlich, wenn Sie eine Inventartabelle ordnungsgemäß speichern. Reporting Aggregate-Funktionen Nachdem eine Abfrage verarbeitet wurde, können Aggregatwerte wie die Anzahl der resultierenden Zeilen oder ein Durchschnittswert in einer Spalte innerhalb einer Partition einfach berechnet und anderen Berichtsfunktionen zur Verfügung gestellt werden. Die Berichtsaggregatfunktionen geben für jede Zeile in einer Partition denselben Aggregatwert zurück. Ihr Verhalten in Bezug auf NULLs ist das gleiche wie die SQL-Aggregatfunktionen. Die Syntax lautet: Darüber hinaus gelten folgende Bedingungen: Ein Asterisk () ist nur in COUNT erlaubt () DISTINCT wird nur unterstützt, wenn entsprechende Aggregatfunktionen den Wert expression1 zulassen und value expression2 ein beliebiger gültiger Ausdruck mit Spaltenreferenzen oder Aggregaten sein kann. Die PARTITION BY-Klausel definiert die Gruppen, auf denen die Fensterfunktionen berechnet werden. Wenn die PARTITION BY-Klausel nicht vorhanden ist, wird die Funktion über die gesamte Abfrageergebnismenge berechnet. Berichtsfunktionen können nur in der SELECT-Klausel oder der ORDER BY-Klausel angezeigt werden. Der Hauptvorteil der Berichtsfunktionen ist ihre Fähigkeit, mehrere Durchläufe von Daten in einem einzelnen Abfrageblock zu tun und die Abfrageleistung zu beschleunigen. Abfragen wie zählen die Anzahl der Verkäufer mit Verkäufen mehr als 10 der Stadtverkäufe erfordern keine Verknüpfungen zwischen getrennten Abfrageblöcken. Betrachten Sie beispielsweise die Frage Für jede Produktkategorie, finden Sie die Region, in der es maximalen Umsatz hatte. Die äquivalente SQL-Abfrage mit der MAX-Berichtsaggregatfunktion wäre: Die innere Abfrage mit der Berichtsaggregatfunktion MAX (SUM (Beträge)) gibt zurück: Die vollständigen Abfrageergebnisse sind: Beispiel 21-12 Reporting Aggregate Beispiel Reporting Aggregate kombiniert mit geschachtelten Abfragen aktivieren Komplexe Abfragen effizient zu beantworten. Zum Beispiel, was, wenn Sie wissen möchten, die meistverkauften Produkte in Ihrer wichtigsten Produkt-Unterkategorien Das Folgende ist eine Abfrage, die die 5 meistverkauften Produkte für jede Produkt-Subkategorie, die mehr als 20 der Verkäufe innerhalb seiner Produktkategorie beiträgt: RATIOTOREPORT Funktion Die Funktion RATIOTOREPORT berechnet das Verhältnis eines Wertes zur Summe eines Wertsatzes. Wenn der Ausdruckswertausdruck zu NULL ausgewertet wird. RATIOTOREPORT wertet auch NULL aus. Aber es wird als Null für die Berechnung der Summe von Werten für den Nenner behandelt. Seine Syntax lautet: Dabei gilt: expr kann ein beliebiger gültiger Ausdruck mit Spaltenreferenzen oder Aggregaten sein. Die PARTITION BY-Klausel definiert die Gruppen, auf denen die RATIOTOREPORT-Funktion berechnet werden soll. Wenn die PARTITION BY-Klausel nicht vorhanden ist, wird die Funktion über die gesamte Abfrageergebnismenge berechnet. Für die Berechnung von RATIOTOREPORT der Verkäufe für jeden Kanal können Sie die folgende Syntax verwenden: LAG / LEAD-Funktionen Die LAG - und LEAD-Funktionen sind nützlich, um Werte zu vergleichen, wenn die relativen Positionen von Zeilen zuverlässig bekannt sein können. Sie arbeiten, indem sie die Anzahl der Zeilen angeben, die die Zielzeile von der aktuellen Zeile trennen. Da die Funktionen den Zugriff auf mehr als eine Zeile einer Tabelle zur gleichen Zeit ohne eine Selbstverknüpfung ermöglichen, können sie die Verarbeitungsgeschwindigkeit erhöhen. Die LAG-Funktion bietet Zugriff auf eine Zeile bei einem gegebenen Offset vor der aktuellen Position und die LEAD-Funktion bietet Zugriff auf eine Zeile bei einem gegebenen Offset nach der aktuellen Position. LAG / LEAD-Syntax Diese Funktionen haben folgende Syntax: offset ist ein optionaler Parameter und standardmäßig auf 1. default ist ein optionaler Parameter und ist der zurückgegebene Wert, wenn offset außerhalb der Grenzen der Tabelle oder Partition liegt. Informationen zur Verwendung der LAG / LEAD-Funktionen zum Durchführen von Vergleichsabfragen für Periodenperioden bei spärlichen Daten finden Sie unter Data Densification for Reporting. FIRST / LAST-Funktionen Die FIRST / LAST-Aggregatfunktionen ermöglichen es Ihnen, einen Datensatz zu ordnen und mit seinen obersten oder untersten Zeilen zu arbeiten. Nach dem Finden der obersten oder untersten Zeilen wird eine Aggregatfunktion auf jede gewünschte Spalte angewendet. Das heißt, FIRST / LAST lässt Sie auf Spalte A rangieren, aber das Ergebnis eines Aggregats zurückgeben, das auf die ersten oder letzten Zeilen der Spalte B angewendet wird. Dies ist wertvoll, weil es die Notwendigkeit für eine Selbstverknüpfung oder Unterabfrage vermeidet, Wodurch die Leistungsfähigkeit verbessert wird. Diese Funktionssyntax beginnt mit einer regulären Aggregatfunktion (MIN, MAX, AVG, COUNT VARIANCE, STDDEV), die einen einzelnen Rückgabewert pro Gruppe erzeugt. Um das angegebene Ranking anzugeben, fügen die FIRST / LAST-Funktionen eine neue Klausel hinzu, die mit dem Wort KEEP beginnt. FIRST / LAST Syntax Diese Funktionen haben folgende Syntax: Beachten Sie, dass die ORDER BY-Klausel mehrere Ausdrücke annehmen kann. FIRST / LAST als reguläre Aggregate Sie können die Aggregate der FIRST / LAST-Aggregate als reguläre Aggregatfunktionen verwenden. Beispiel 21-15 FIRST / LAST Beispiel 1 Die folgende Abfrage ermöglicht es uns, den Mindestpreis und den Listenpreis unserer Produkte zu vergleichen. Für jedes Produkt Unterkategorie innerhalb der Mens Kleidung Kategorie, gibt es die folgenden: Listenpreis des Produkts mit dem niedrigsten Mindestpreis Niedrigster Mindestpreis Listenpreis des Produkts mit dem höchsten Mindestpreis Höchster Mindestpreis FIRST / LAST Als Reporting Aggregates Sie können auch Verwenden Sie die Aggregate FIRST / LAST als Aggregatfunktionen. Ein Beispiel ist die Berechnung, welche Monate die größte und geringste Zunahme der Kopfzahl das ganze Jahr über. Die Syntax für diese Funktionen ähnelt der Syntax für jedes andere Berichtsaggregat. Betrachten Sie das Beispiel in Beispiel 21-15 für FIRST / LAST. Was wäre, wenn wir die Listenpreise einzelner Produkte finden und sie mit den Listenpreisen der Produkte in ihrer Unterkategorie vergleichen wollten, die die höchsten und niedrigsten Mindestpreise hatten? Die folgende Abfrage läßt uns die Informationen für die Unterlagen zur Dokumentation unter Verwendung von FIRST / LAST finden Als Berichtsaggregate. Beispiel 21-16 ERSTES / LETZTES Beispiel 2 Die Verwendung der FIRST - und LAST-Funktionen als Berichtsaggregate macht es einfach, die Ergebnisse in Berechnungen wie Gehalt als Prozentsatz des höchsten Gehalts einzubeziehen. Inverse Percentile-Funktionen Mit Hilfe der CUMEDIST-Funktion finden Sie die kumulative Verteilung (percentile) eines Wertsatzes. Allerdings ist die inverse Operation (Feststellung, welcher Wert zu einem bestimmten Perzentil berechnet) weder einfach noch effizient zu berechnen. Um diese Schwierigkeiten zu überwinden, wurden die Funktionen PERCENTILECONT und PERCENTILEDISC eingeführt. Diese können sowohl als Fensterberichterstattungsfunktionen als auch als normale Aggregatfunktionen verwendet werden. Diese Funktionen benötigen eine Sortierspezifikation und einen Parameter, der einen Perzentilwert zwischen 0 und 1 annimmt. Die Sortierspezifikation wird mit einer ORDER BY-Klausel mit einem Ausdruck behandelt. Wenn es als normale Aggregatfunktion verwendet wird, gibt es einen einzelnen Wert für jeden bestellten Satz zurück. PERCENTILECONT. Die eine durch Interpolation berechnete kontinuierliche Funktion und PERCENTILEDISC ist. Die eine Schrittfunktion ist, die diskrete Werte annimmt. Wie andere Aggregate arbeiten PERCENTILECONT und PERCENTILEDISC auf einer Gruppe von Zeilen in einer gruppierten Abfrage, jedoch mit den folgenden Unterschieden: Sie benötigen einen Parameter zwischen 0 und 1 (einschließlich). Ein aus diesem Bereich spezifizierter Parameter führt zu einem Fehler. Dieser Parameter sollte als Ausdruck angegeben werden, der eine Konstante auswertet. Sie benötigen eine Sortierung. Diese Sortierspezifikation ist eine ORDER BY-Klausel mit einem einzelnen Ausdruck. Mehrere Ausdrücke sind nicht erlaubt. Normal-Aggregat-Syntax Inverse Perzentil-Beispielbasis Wir verwenden die folgende Abfrage, um die 17 Zeilen der Daten zurückzugeben, die in den Beispielen dieses Abschnitts verwendet werden: PERCENTILEDISC (x) wird berechnet, indem die CUMEDIST-Werte in jeder Gruppe gescannt werden, bis die erste größer ist Oder gleich x ist. Wobei x der angegebene Perzentilwert ist. Für die Beispielabfrage mit PERCENTILEDISC (0,5) ergibt sich ein Ergebnis von 5.000, wie folgendes illustriert: Das Ergebnis von PERCENTILECONT wird durch lineare Interpolation zwischen Zeilen nach der Bestellung berechnet. Berechnen von PERCENTILECONT (x). Berechnen wir zunächst die Zeilennummer RN (1x (n-1)), wobei n die Anzahl der Zeilen in der Gruppe und x der angegebene Perzentilwert ist. Das Endresultat der Aggregatfunktion wird durch lineare Interpolation zwischen den Werten aus Zeilen der Zeilennummern CRN CEIL (RN) und FRN FLOOR (RN) berechnet. Das endgültige Ergebnis wird sein: PERCENTILECONT (X) if (CRN FRN RN), dann (Wert des Ausdrucks von Zeile bei RN) sonst (CRN - RN) (Wert des Ausdrucks für Zeile bei FRN) (RN - FRN) (Wert von Ausdruck für Zeile bei CRN). Betrachten wir die vorherige Beispielabfrage, wo wir PERCENTILECONT (0.5) berechnen. Hier ist n 17. Die Reihennummer RN (1 0,5 (n-1)) 9 für beide Gruppen. Setzen wir dies in die Formel (FRNCRN9), so geben wir den Wert aus Zeile 9 als Ergebnis zurück. Ein anderes Beispiel ist, wenn Sie PERCENTILECONT (0.66) berechnen wollen. Die berechnete Zeilennummer RN (1 0,66 (n -1)) (1 0,6616) 11,67. PERCENTILECONT (0,66) (12-11,67) (Wert der Zeile 11) (11,67-11) (Wert der Zeile 12). Diese Ergebnisse sind: Inverse-Perzentil-Aggregatfunktionen können in der HAVING-Klausel einer Abfrage wie andere vorhandene Aggregatfunktionen auftreten. Als Reporting Aggregates können Sie auch die Aggregatfunktionen PERCENTILECONT nutzen. PERCENTILEDISC als Berichtsaggregatfunktionen. Bei der Verwendung als Berichtsaggregatfunktionen ist die Syntax ähnlich wie bei anderen Berichtsaggregaten. Diese Abfrage berechnet das gleiche Ergebnis (Median-Kreditlimit für Kunden in dieser Ergebnismenge, meldet jedoch das Ergebnis für jede Zeile in der Ergebnismenge, wie in der folgenden Ausgabe gezeigt: Inverse Percentile Restrictions Für PERCENTILEDISC kann der Ausdruck in der ORDER BY-Klausel verwendet werden (Numeric, string, date usw.) Der Ausdruck in der ORDER BY-Klausel muss jedoch ein numerischer oder datetime-Typ sein (einschließlich Intervalle), da lineare Interpolation zur Auswertung von PERCENTILECONT verwendet wird. Wenn der Ausdruck vom Typ DATE ist, wird das interpolierte Ergebnis auf die kleinste Einheit für den Typ gerundet Für einen DATE-Typ wird der interpolierte Wert auf die nächste Sekunde gerundet, für Intervalltypen auf die nächste Sekunde (INTERVAL DAY TO SECOND) Oder bis zum Monat (INTERVAL YEAR TO MONTH) Wie andere Aggregate ignorieren die inversen Perzentilfunktionen NULLs beim Auswerten des Ergebnisses. Wenn Sie beispielsweise den Medianwert in einer Menge finden möchten, ignoriert Oracle Database die NULLs und findet den Median Unter den Nicht-Nullwerten. Sie können die Option NULLS FIRST / NULLS LAST in der ORDER BY-Klausel verwenden, werden jedoch ignoriert, da NULLs ignoriert werden. Hypothetische Rang - und Verteilungsfunktionen Diese Funktionen bieten Funktionalitäten, die für eine Was-wäre-Analyse nützlich sind. Ein Beispiel wäre der Rang einer Zeile, wenn die Zeile hypothetisch in einen Satz von anderen Zeilen eingefügt wurde. Diese Aggregatgruppe nimmt ein oder mehrere Argumente einer hypothetischen Zeile und einer geordneten Gruppe von Zeilen an und gibt die RANK zurück. DENSERANK. PERCENTRANK oder CUMEDIST der Zeile, als ob sie hypothetisch in die Gruppe eingefügt wurde. Hypothetische Rang - und Verteilungssyntax Hier bezieht sich konstanter Ausdruck auf einen Ausdruck, der eine Konstante auswertet, und es können mehr als eine solche Ausdrücke vorhanden sein, die als Argumente an die Funktion übergeben werden. Die ORDER BY-Klausel kann einen oder mehrere Ausdrücke enthalten, die die Sortierreihenfolge definieren, auf der das Ranking basiert. ASC. DESC. NULLS ERSTE. NULLS LAST-Optionen stehen für jeden Ausdruck in der ORDER BY zur Verfügung. Beispiel 21-17 Hypothetisches Rang - und Verteilungsbeispiel 1 Mit Hilfe der Listenpreisdaten aus der in diesem Abschnitt verwendeten Produkttabelle können Sie den RANK berechnen. PERCENTRANK und CUMEDIST für eine hypothetische Pullover mit einem Preis von 50 für wie es passt in jede der Pullover Unterkategorien. Die Abfrage und die Ergebnisse sind: Im Gegensatz zu den inversen Perzentilaggregaten kann die ORDER BY-Klausel in der Sortierspezifikation für hypothetische Rang - und Verteilungsfunktionen mehrere Ausdrücke annehmen. Die Anzahl der Argumente und die Ausdrücke in der ORDER BY-Klausel sollten dieselben sein und die Argumente müssen konstante Ausdrücke desselben oder kompatiblen Typs zu dem entsprechenden ORDER BY-Ausdruck sein. Das folgende ist ein Beispiel mit zwei Argumenten in mehreren hypothetischen Ranking-Funktionen. Beispiel 21-18 Hypothetischer Rang und Verteilungsbeispiel 2 Diese Funktionen können in der HAVING-Klausel einer Abfrage ebenso wie andere Aggregatfunktionen erscheinen. Sie können nicht als Berichtsaggregatfunktionen oder als Fensteraggregatfunktionen verwendet werden. Lineare Regressionsfunktionen Die Regressionsfunktionen unterstützen die Anpassung einer Regressionsgerade auf eine Reihe von Zahlenpaaren. Sie können sie sowohl als Aggregatfunktionen als auch als Fenster - oder Reportingfunktionen verwenden. Die Funktionen sind wie folgt: Oracle wendet die Funktion auf den Satz von (e1.e2) Paaren an, nachdem alle Paare eliminiert wurden, für die entweder e1 oder e2 null ist. E1 wird als ein Wert der abhängigen Variablen (ein y-Wert) interpretiert, und e2 wird als ein Wert der unabhängigen Variablen (ein x-Wert) interpretiert. Beide Ausdrücke müssen Zahlen sein. Die Regressionsfunktionen werden alle gleichzeitig während eines einzigen Durchlaufs der Daten berechnet. Sie werden häufig mit dem COVARPOP kombiniert. COVARSAMP. Und CORR-Funktionen. REGRCOUNT Funktion REGRCOUNT gibt die Anzahl der Nicht-Null-Zahlenpaare zurück, die für die Regressionsgerade verwendet wurden. Wenn auf einen leeren Satz angewendet wird (oder wenn es keine (e1, e2) Paare gibt, in denen weder e1 noch e2 null ist), gibt die Funktion 0 zurück. REGRAVGY und REGRAVGX Die Funktionen REGRAVGY und REGRAVGX berechnen die Mittelwerte der abhängigen Variablen und der unabhängigen Variable der Regressionsgeraden. REGRAVGY berechnet den Durchschnitt seines ersten Arguments (e1) nach dem Eliminieren von (e1.e2) Paaren, bei denen entweder e1 oder e2 Null ist. In ähnlicher Weise berechnet REGRAVGX den Durchschnitt seines zweiten Arguments (e2) nach einer Nulleliminierung. Beide Funktionen geben NULL zurück, wenn sie auf einen leeren Satz angewendet werden. REGRSLOPE - und REGRINTERCEPT-Funktionen Die REGRSLOPE-Funktion berechnet die Steigung der Regressionsgerade, die an Nicht-Null-Paare (e1.e2) angepasst ist. Die Funktion REGRINTERCEPT berechnet den y-Achsenabschnitt der Regressionsgeraden. REGRINTERCEPT gibt NULL zurück, wenn Slope oder die Regressionsmittelwerte NULL sind. REGRR2 Funktion Die Funktion REGRR2 berechnet den Bestimmungskoeffizienten (üblicherweise R-Quadrat oder Gütegrad) für die Regressionsgeraden. REGRR2 gibt Werte zwischen 0 und 1 zurück, wenn die Regressionslinie definiert ist (Steigung der Linie ist nicht Null) und es gibt sonst NULL zurück. Je näher der Wert auf 1 ist, desto besser passt die Regressionslinie zu den Daten. REGRSXX, REGRSYY und REGRSXY Funktionen REGRSXX. REGRSYY - und REGRSXY-Funktionen werden bei der Berechnung verschiedener diagnostischer Statistiken für die Regressionsanalyse verwendet. Nach der Eliminierung von (e1.e2) - Paaren, bei denen entweder e1 oder e2 null ist, stellen diese Funktionen die folgenden Berechnungen bereit: Lineare Regressionstatistik-Beispiele Einige allgemeine diagnostische Statistiken, die die lineare Regressionsanalyse begleiten, sind in Tabelle 21-2, Allgemeine Diagnostikstatistiken und deren Ausdrücke. Beachten Sie, dass diese neue Funktionen können Sie alle diese zu berechnen. Tabelle 21-2 Gemeinsame Diagnostikstatistiken und ihre Ausdrücke Beispiel für lineare Regressionsberechnung In diesem Beispiel berechnen wir eine Regressionsgerade, die die Menge eines Produkts als lineare Funktion des Produktlistenpreises ausdrückt. Die Berechnungen werden nach Vertriebskanal gruppiert. Die Werte SLOPE. INTCPT. RSQR sind Steigung, Intercept und Bestimmungskoeffizient der Regressionslinie. Der (ganzzahlige) Wert COUNT ist die Anzahl der Produkte in jedem Kanal, für den sowohl die verkauften Mengen als auch die Listenpreisdaten verfügbar sind. Häufige Itemsets Anstatt zu zählen, wie oft ein bestimmtes Ereignis auftritt (z. B. wie oft jemand im Supermarkt Milch gekauft hat), bietet häufige Itemsets einen Mechanismus zum Zählen, wie oft mehrere Ereignisse zusammen auftreten (zum Beispiel, wie oft jemand beide Milch gekauft hat) Und Getreide zusammen an der Supermarkt). Die Eingabe der Funktion "frequent-itemsets" ist ein Satz von Daten, die Sammlungen von Elementen (Itemsets) darstellen. Einige Beispiele für Postenets könnten alle Produkte sein, die ein bestimmter Kunde in einer einzigen Reise zum Lebensmittelgeschäft gekauft hat (allgemein als Marktkorb bezeichnet), die Webseiten, auf die ein Benutzer in einer einzigen Sitzung zugreift, oder die Finanzdienstleistungen, die a Kundennutzen. Die Vorstellung eines häufigen Itemset ist es, diejenigen Itemsets zu finden, die am häufigsten auftreten. Wenn Sie den Häufigkeits-Itemset-Operator auf einen Lebensmitteleinzelhandel-Point-of-Sale-Daten anwenden, können Sie zum Beispiel entdecken, dass Milch und Bananen das am häufigsten gekaufte Paar von Artikeln sind. Häufige Postenets sind damit seit vielen Jahren in Business-Intelligence-Umgebungen verwendet worden, wobei die gebräuchlichste für die Marktkorb-Analyse im Einzelhandel ist. Häufige Postenets werden mit der Datenbank integriert, die über relationale Tabellen verfügt und über SQL aufgerufen wird. Diese Integration bietet ein paar wichtige Vorteile: Anwendungen, die bisher auf häufige Itemset-Operationen angewiesen waren, profitieren nun von einer deutlich verbesserten Performance sowie einer einfacheren Implementierung. SQL-basierte Anwendungen, die bisher keine häufigen Postenets verwendet haben, können nun leicht erweitert werden, um diese Funktionalität nutzen zu können. Häufige Itemsets-Analyse wird mit dem PL / SQL-Paket DBMSFREQUENTITEMSETS durchgeführt. Weitere Informationen finden Sie unter PL / SQL-Pakete und Typenreferenzen. Weitere statistische Funktionen Oracle stellt eine Reihe statistischer SQL-Funktionen und ein Statistikpaket, DBMSSTATFUNCS, vor. In diesem Abschnitt werden einige der neuen Funktionen zusammen mit der grundlegenden Syntax aufgelistet. Ausführliche Informationen zum DBMSSTATFUNCS-Paket und zu Oracle Database SQL Reference finden Sie unter PL / SQL-Pakete und Typenreferenz für Syntax und Semantik. Beschreibende Statistik Sie können folgende deskriptive Statistik berechnen: Median eines Datensatz-Modus eines Datensatzes Sie können folgende parametrische Statistik berechnen: Spearmans rho Koeffizient Kendalls tau-b Koeffizient Zusätzlich zu den Funktionen verfügt diese Version über ein neues PL / SQL Paket, DBMSSTATFUNCS. Es enthält die beschreibende statistische Funktion ZUSAMMENFASSUNG zusammen mit Funktionen zur Unterstützung der Verteilungsanpassung. Die SUMMARY-Funktion fasst eine numerische Spalte einer Tabelle mit einer Vielzahl von deskriptiven Statistiken zusammen. Die fünf Verteilungsanpassungsfunktionen unterstützen normale, einheitliche, Weibull-, Poisson - und Exponentialverteilungen. WIDTHBUCKET-Funktion Die WIDTHBUCKET-Funktion gibt für einen gegebenen Ausdruck die Bucket-Nummer zurück, nach der das Ergebnis dieses Ausdrucks zugewiesen wird. Sie können mit dieser Funktion Gleichheitshistogramme erzeugen. Equiwidth-Histogramme unterteilen Datensätze in Buckets, deren Intervallgröße (höchster Wert zum niedrigsten Wert) gleich ist. Die Anzahl der Zeilen, die von jedem Eimer gehalten werden, variiert. Eine verwandte Funktion, NTILE. Schafft gleich große Schaufeln. Equiwidth-Histogramme können nur für numerische, Datums - oder Datetime-Typen erzeugt werden. Die ersten drei Parameter sollten also alle numerischen Ausdrücke oder alle Datumsausdrücke sein. Andere Ausdrücke sind nicht zulässig. Wenn der erste Parameter NULL ist. Das Ergebnis ist NULL. Wenn der zweite oder dritte Parameter NULL ist. Wird eine Fehlermeldung zurückgegeben, da ein NULL-Wert keinen Endpunkt (oder einen beliebigen Punkt) für einen Bereich in einer Datums - oder numerischen Wertdimension angibt. Der letzte Parameter (Anzahl der Buckets) sollte ein numerischer Ausdruck sein, der einen positiven Integerwert 0, NULL auswertet. Oder ein negativer Wert führt zu einem Fehler. Die Buckets sind von 0 bis (n 1) nummeriert. Bucket 0 enthält die Anzahl der Werte, die kleiner als das Minimum sind. Bucket (n 1) hält die Anzahl der Werte, die größer oder gleich dem maximalen angegebenen Wert sind. WIDTHBUCKET Syntax Das WIDTHBUCKET nimmt vier Ausdrücke als Parameter an. Der erste Parameter ist der Ausdruck, für den das equiwidth-Histogramm gilt. Der zweite und dritte Parameter sind Ausdrücke, die die Endpunkte des akzeptablen Bereichs für den ersten Parameter bezeichnen. Der vierte Parameter bezeichnet die Anzahl der Buckets. Betrachten Sie die folgenden Daten von Tischkunden. Dass die Kreditlimiten von 17 Kunden zeigt. Diese Daten werden in der in Beispiel 21-19 gezeigten Abfrage gesammelt. In der Tabelle Kunden. Die Spalte custcreditlimit enthält Werte zwischen 1500 und 15000, und wir können die Werte zu vier Equiwidth Buckets, nummeriert von 1 bis 4, mit WIDTHBUCKET (custcreditlimit, 0, 20000, 4) zuweisen. Idealerweise ist jede Schaufel ein geschlossenes Intervall der reellen Zahlenlinie, z. B. ist die Schaufelzahl 2 Scores zwischen 5000.0000 und 9999.9999 zugeordnet. Manchmal mit 5000, 10000 bezeichnet), um anzuzeigen, daß 5.000 in dem Intervall enthalten sind und 10.000 ausgeschlossen sind. Um Werte außerhalb des Bereichs 0, 20.000 zu erfassen, werden Werte kleiner als 0 einer bezeichneten Unterlaufschaufel mit der Nummer 0 zugewiesen und Werte größer oder gleich 20.000 einer bezeichneten Überlaufschaufel, die mit 5 (num Schaufeln 1 Im Algemeinen). Siehe Abbildung 21-3 für eine grafische Darstellung, wie die Buckets zugeordnet sind. Sie können die Schranken in umgekehrter Reihenfolge angeben, z. B. WIDTHBUCKET (custcreditlimit 20000. 0. 4). Wenn die Schranken umgekehrt werden, sind die Buckets offen-geschlossene Intervalle. In diesem Beispiel ist die Schaufelzahl 1 (15000,20000, die Schaufelzahl 2 ist (10000,15000 und die Schaufelzahl 4, (0, 5000. Die Überlaufschaufel wird mit 0 (20000. unendlich) und die Unterlaufschaufel numeriert Wird numeriert 5 (- unendlich 0. Es ist ein Fehler, wenn der Bucket-Zählparameter 0 oder negativ ist Die nachfolgende g-Abfrage zeigt die Bucket-Nummern für die Kreditlimits in der Kundentabelle für beide Fälle, in denen die Grenzen in der Regel angegeben sind Oder umgekehrte Reihenfolge Wir verwenden einen Bereich von 0 bis 20 000. Benutzerdefinierte Aggregatfunktionen Oracle bietet eine Möglichkeit zur Erstellung eigener Funktionen, sogenannte benutzerdefinierte Aggregatfunktionen, die in Programmiersprachen wie PL / SQL, Java, Und C, und können als analytische Funktionen oder Aggregate in materialisierten Ansichten verwendet werden Weitere Informationen zu Syntax und Einschränkungen finden Sie im Oracle Data Cartridge Developers Guide Die Vorteile dieser Funktionen sind: Hochkomplexe Funktionen können mit einer vollständig prozeduralen Sprache programmiert werden. Höhere Skalierbarkeit als andere Techniken, wenn benutzerdefinierte Funktionen für die Parallelverarbeitung programmiert werden. Objektdatentypen können verarbeitet werden. Als einfaches Beispiel für eine benutzerdefinierte Aggregatfunktion ist die Skew-Statistik zu betrachten. Diese Berechnung mißt, wenn ein Datensatz eine schiefe Verteilung um seinen Mittelwert hat. Es wird Ihnen sagen, wenn ein Schwanz der Verteilung ist deutlich größer als die anderen. Wenn Sie ein benutzerdefiniertes Aggregat namens udskew erstellt und auf die Kreditlimitdaten des vorherigen Beispiels angewendet haben, können die SQL-Anweisung und die Ergebnisse wie folgt aussehen: Bevor Sie benutzerdefinierte Aggregatfunktionen erstellen, sollten Sie prüfen, ob Ihre Anforderungen erfüllt werden können In regelmäßigen SQL. Viele komplexe Berechnungen sind direkt in SQL möglich, insbesondere durch Verwendung des CASE-Ausdrucks. Der Aufenthalt mit regulärem SQL ermöglicht eine einfachere Entwicklung, und viele Abfrageoperationen sind in SQL bereits gut parallelisiert. Selbst das frühere Beispiel, die Skew-Statistik, kann mit Standard, wenn auch langwierig, SQL erstellt werden. CASE-Ausdrücke Oracle unterstützt jetzt einfache und durchsuchte CASE-Anweisungen. CASE-Anweisungen sind ähnlich im Sinne der DECODE-Anweisung, aber sie bieten mehr Flexibilität und logische Macht. Sie sind auch leichter zu lesen als herkömmliche DECODE-Anweisungen und bieten auch eine bessere Leistung. Katze.
No comments:
Post a Comment