Kategorien:

Abfragesyntax

GROUP BY CUBE

GROUP BY CUBE ist eine Erweiterung der GROUP BY-Klausel und ähnelt GROUP BY ROLLUP. Zusätzlich zur Erzeugung aller Zeilen von GROUP BY ROLLUP fügt GROUP BY CUBE alle „Kreuztabellierungszeilen“ hinzu. Zwischensummenzeilen sind Zeilen, die weiter aggregieren, wessen Werte durch Berechnung derselben Aggregatfunktionen abgeleitet werden, die zur Erstellung der gruppierten Zeilen verwendet wurden.

Eine CUBE-Gruppierung entspricht einer Reihe von Gruppierungssätzen und ist im Wesentlichen eine kürzere Spezifikation. Die N Elemente einer CUBE-Spezifikation entsprechen 2^N GROUPING SETS.

Siehe auch:

GROUP BY GROUPING SETS

Syntax

SELECT ...
FROM ...
[ ... ]
GROUP BY CUBE ( groupCube [ , groupCube [ , ... ] ] )
[ ... ]

Wobei:

groupCube ::= { <column_alias> | <position> | <expr> }
Spaltenalias

Spaltenalias, der in der Liste SELECT des Abfrageblocks angezeigt wird.

Position

Position eines Ausdrucks in der Liste SELECT.

Ausdruck

Jeder Ausdruck in Tabellen im aktuellen Bereich.

Nutzungshinweise

  • Snowflake erlaubt in jedem Cube bis zu 7 Elemente (entspricht 128 Gruppierungssätzen).

Beispiele

Beginnen Sie durch Erstellen und Laden einer Tabelle mit Informationen über Umsätze aus einer Handelskette, die Niederlassungen in verschiedenen Städten und Bundesstaaten/Regionen hat.

-- Create some tables and insert some rows.
CREATE TABLE products (product_ID INTEGER, wholesale_price REAL);
INSERT INTO products (product_ID, wholesale_price) VALUES 
    (1, 1.00),
    (2, 2.00);

CREATE TABLE sales (product_ID INTEGER, retail_price REAL, 
    quantity INTEGER, city VARCHAR, state VARCHAR);
INSERT INTO sales (product_id, retail_price, quantity, city, state) VALUES 
    (1, 2.00,  1, 'SF', 'CA'),
    (1, 2.00,  2, 'SJ', 'CA'),
    (2, 5.00,  4, 'SF', 'CA'),
    (2, 5.00,  8, 'SJ', 'CA'),
    (2, 5.00, 16, 'Miami', 'FL'),
    (2, 5.00, 32, 'Orlando', 'FL'),
    (2, 5.00, 64, 'SJ', 'PR');

Führen Sie eine Cube-Abfrage aus:

SELECT state, city, SUM((s.retail_price - p.wholesale_price) * s.quantity) AS profit 
 FROM products AS p, sales AS s
 WHERE s.product_ID = p.product_ID
 GROUP BY CUBE (state, city)
 ;

Ausgabe:

SELECT state, city, SUM((s.retail_price - p.wholesale_price) * s.quantity) AS profit 
 FROM products AS p, sales AS s
 WHERE s.product_ID = p.product_ID
 GROUP BY CUBE (state, city)
 ;
+-------+---------+--------+
| STATE | CITY    | PROFIT |
|-------+---------+--------|
| CA    | SF      |     13 |
| CA    | SJ      |     26 |
| FL    | Miami   |     48 |
| FL    | Orlando |     96 |
| PR    | SJ      |    192 |
| CA    | NULL    |     39 |
| FL    | NULL    |    144 |
| PR    | NULL    |    192 |
| NULL  | NULL    |    375 |
| NULL  | SF      |     13 |
| NULL  | SJ      |    218 |
| NULL  | Miami   |     48 |
| NULL  | Orlando |     96 |
+-------+---------+--------+