- Kategorien:
Fensterfunktionen (Allgemein)
RATIO_TO_REPORT¶
Gibt das Verhältnis eines Wertes innerhalb einer Gruppe zur Summe der Werte innerhalb der Gruppe zurück. Wenn der erste Ausdruck expr1
null ergibt oder die Summe von expr1
innerhalb der Gruppe den Wert 0 ergibt, gibt RATIO_TO_REPORT null zurück.
Syntax¶
RATIO_TO_REPORT( <expr1> ) [ OVER ( [ PARTITION BY <expr2> ] [ ORDER BY <expr3> ] ) ]
Argumente¶
expr1
Dies ist ein Ausdruck, der einen numerischen Datentyp ergibt (INTEGER, FLOAT, DECIMAL usw.).
expr2
Dies ist der optionale Ausdruck, nach dem partitioniert werden soll.
expr3
Dies ist der optionale Ausdruck, nach dem in jeder Partition sortiert werden soll. Beachten Sie, dass für diese Funktion die Reihenfolge innerhalb der Partition keinen Einfluss auf die Ausgabe hat.
Bei dieser Funktion wird (wie bei allen Fensterfunktionen) die Reihenfolge der gesamten Abfrageausgabe nicht von dieser ORDER BY-Klausel gesteuert.
Nutzungshinweise¶
RATIO_TO_REPORT berechnet sich wie folgt:
Wert von Argument
expr1
für die aktuelle Zeile / Summe von Argumentexpr1
für die PartitionDie ORDER BY-Unterklausel in der OVER()-Klausel ist bei dieser Funktion aus Gründen der syntaktischen Konsistenz mit anderen Fensterfunktionen zulässig, das ORDER BY hat jedoch keine Auswirkungen auf die Berechnung. Snowflake empfiehlt, bei Verwendung dieser Funktion keine ORDER BY-Unterklausel in die OVER-Klausel aufzunehmen.
Beispiele¶
Das folgende einfache Beispiel zeigt den Prozentsatz des Gewinns einer Geschäftskette, der von jedem einzelnen Geschäft generiert wurde:
CREATE TABLE store_profit ( store_ID INTEGER, province VARCHAR, profit NUMERIC(11, 2)); INSERT INTO store_profit (store_ID, province, profit) VALUES (1, 'Ontario', 300), (2, 'Saskatchewan', 250), (3, 'Ontario', 450), (4, 'Ontario', NULL) -- hasn't opened yet, so no profit yet. ;SELECT store_ID, profit, 100 * RATIO_TO_REPORT(profit) OVER () AS percent_profit FROM store_profit ORDER BY store_ID; +----------+--------+----------------+ | STORE_ID | PROFIT | PERCENT_PROFIT | |----------+--------+----------------| | 1 | 300.00 | 30.00000000 | | 2 | 250.00 | 25.00000000 | | 3 | 450.00 | 45.00000000 | | 4 | NULL | NULL | +----------+--------+----------------+
Das folgende Beispiel zeigt den Prozentsatz des Gewinns in jedem Gebiet, der von jedem Geschäft in diesem Gebiet generiert wurde:
SELECT province, store_ID, profit, 100 * RATIO_TO_REPORT(profit) OVER (PARTITION BY province) AS percent_profit FROM store_profit ORDER BY province, store_ID; +--------------+----------+--------+----------------+ | PROVINCE | STORE_ID | PROFIT | PERCENT_PROFIT | |--------------+----------+--------+----------------| | Ontario | 1 | 300.00 | 40.00000000 | | Ontario | 3 | 450.00 | 60.00000000 | | Ontario | 4 | NULL | NULL | | Saskatchewan | 2 | 250.00 | 100.00000000 | +--------------+----------+--------+----------------+