GROUPClause BY - Amazon OpenSearch Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

GROUPClause BY

Note

Pour savoir quelles intégrations de sources de AWS données prennent en charge cette SQL commande, consultez OpenSearch SQLCommandes et fonctions prises en charge.

La GROUP BY clause est utilisée pour regrouper les lignes en fonction d'un ensemble d'expressions de regroupement spécifiées et pour calculer des agrégations sur le groupe de lignes en fonction d'une ou de plusieurs fonctions d'agrégation spécifiées.

Le système effectue également plusieurs agrégations pour le même ensemble d'enregistrements d'entrée via des ROLLUP clauses GROUPING SETSCUBE,. Les expressions de regroupement et les agrégations avancées peuvent être mélangées dans la GROUP BY clause et imbriquées dans une GROUPING SETS clause. Voir plus de détails dans la Mixed/Nested Grouping Analytics section.

Lorsqu'une FILTER clause est attachée à une fonction d'agrégation, seules les lignes correspondantes sont transmises à cette fonction.

Syntaxe

GROUP BY group_expression [ , group_expression [ , ... ] ] [ WITH { ROLLUP | CUBE } ] GROUP BY { group_expression | { ROLLUP | CUBE | GROUPING SETS } (grouping_set [ , ...]) } [ , ... ]

Alors que les fonctions d'agrégation sont définies comme suit :

aggregate_name ( [ DISTINCT ] expression [ , ... ] ) [ FILTER ( WHERE boolean_expression ) ]

Paramètres

  • expression_groupe

    Spécifie les critères selon lesquels les lignes sont regroupées. Le regroupement des lignes est effectué en fonction des valeurs de résultat des expressions de regroupement.

    Une expression de regroupement peut être un nom de colonneGROUP BY a, une position de colonne ou une expression similaireGROUP BY a + b. GROUP BY 0

  • grouping_set

    Un ensemble de regroupement est spécifié par zéro ou plusieurs expressions séparées par des virgules entre parenthèses. Lorsque l'ensemble de regroupement ne comporte qu'un seul élément, les parenthèses peuvent être omises.

    Par exemple, GROUPING SETS ((a), (b)) est identique à GROUPING SETS (a, b).

    Syntaxe : { ( [ expression [ , ... ] ] ) | expression }

  • GROUPING SETS

    Regroupe les lignes pour chaque ensemble de regroupement spécifié par la suiteGROUPING SETS.

    Par exemple, GROUP BY GROUPING SETS ((warehouse), (product)) est sémantiquement équivalent à l'union des résultats de GROUP BY warehouse et. GROUP BY product Cette clause est un raccourci pour un dans UNION ALL lequel chaque étape de l'UNION ALLopérateur effectue l'agrégation de chaque ensemble de groupements spécifié dans la GROUPING SETS clause.

    De même, GROUP BY GROUPING SETS ((warehouse, product), (product), ()) est sémantiquement équivalent à l'union des résultats d'GROUP BY warehouse, product, GROUP BY productun agrégat global.

  • ROLLUP

    Spécifie plusieurs niveaux d'agrégation dans une seule instruction. Cette clause est utilisée pour calculer des agrégations basées sur plusieurs ensembles de regroupement. ROLLUPest un raccourci pour. GROUPING SETS

    Par exemple, GROUP BY warehouse, product WITH ROLLUP or GROUP BY ROLLUP(warehouse, product) équivaut à GROUP BY GROUPING SETS((warehouse, product), (warehouse), ()).

    GROUP BY ROLLUP(warehouse, product, (warehouse, location)) est équivalent à GROUP BY GROUPING SETS((warehouse, product, location), (warehouse, product), (warehouse), ()).

    Les N éléments d'une ROLLUP spécification donnent N+1 GROUPINGSETS.

  • CUBE

    CUBELa clause est utilisée pour effectuer des agrégations basées sur la combinaison des colonnes de regroupement spécifiées dans la clause GROUP BY. CUBEest un raccourci pour. GROUPING SETS

    Par exemple, GROUP BY warehouse, product WITH CUBE or GROUP BY CUBE(warehouse, product) équivaut à GROUP BY GROUPING SETS((warehouse, product), (warehouse), (product), ()).

    GROUP BY CUBE(warehouse, product, (warehouse, location)) est équivalent à GROUP BY GROUPING SETS((warehouse, product, location), (warehouse, product), (warehouse, location), (product, warehouse, location), (warehouse), (product), (warehouse, product), ()). Les N éléments d'une CUBE spécification donnent GROUPING SETS 2^N.

  • Analyse des groupes mixtes/imbriqués

    Une GROUP BY clause peut inclure plusieurs group_expressions et plusieurs. CUBE|ROLLUP|GROUPING SETS GROUPING SETSpeut également comporter des CUBE|ROLLUP|GROUPING SETS clauses imbriquées, telles queGROUPING SETS(ROLLUP(warehouse, location),CUBE(warehouse, location)), GROUPING SETS(warehouse, GROUPING SETS(location, GROUPING SETS(ROLLUP(warehouse, location),CUBE(warehouse, location)))).

    CUBE|ROLLUPest juste un sucre de syntaxe pourGROUPING SETS. Reportez-vous aux sections ci-dessus pour savoir comment traduire CUBE|ROLLUP enGROUPING SETS. group_expressionpeut être traité comme un seul groupe GROUPING SETS dans ce contexte.

    Pour un multiple GROUPING SETS dans la GROUP BY clause, nous générons un seul GROUPING SETS en faisant un produit croisé de l'originalGROUPING SETS. Pour imbriquer GROUPING SETS dans la GROUPING SETS clause, il suffit de prendre ses ensembles de regroupement et de les supprimer.

    Par exemple, GROUP BY warehouse, GROUPING SETS((product), ()), GROUPING SETS((location, size), (location), (size), ()) and GROUP BY warehouse, ROLLUP(product), CUBE(location, size) équivaut à GROUP BY GROUPING SETS( (warehouse, product, location, size), (warehouse, product, location), (warehouse, product, size), (warehouse, product), (warehouse, location, size), (warehouse, location), (warehouse, size), (warehouse)).

    GROUP BY GROUPING SETS(GROUPING SETS(warehouse), GROUPING SETS((warehouse, product))) est équivalent à GROUP BY GROUPING SETS((warehouse), (warehouse, product)).

  • nom_agrégat

    Spécifie le nom d'une fonction d'agrégation (MINMAXCOUNTSUM,AVG,,,, etc.).

  • DISTINCT

    Supprime les doublons dans les lignes d'entrée avant qu'ils ne soient transmis aux fonctions d'agrégation.

  • FILTER

    Filtres : les lignes d'entrée pour lesquelles la WHERE clause boolean_expression in the est évaluée à true sont transmises à la fonction d'agrégation ; les autres lignes sont ignorées.

Exemples

CREATE TABLE dealer (id INT, city STRING, car_model STRING, quantity INT); INSERT INTO dealer VALUES (100, 'Fremont', 'Honda Civic', 10), (100, 'Fremont', 'Honda Accord', 15), (100, 'Fremont', 'Honda CRV', 7), (200, 'Dublin', 'Honda Civic', 20), (200, 'Dublin', 'Honda Accord', 10), (200, 'Dublin', 'Honda CRV', 3), (300, 'San Jose', 'Honda Civic', 5), (300, 'San Jose', 'Honda Accord', 8); -- Sum of quantity per dealership. Group by `id`. SELECT id, sum(quantity) FROM dealer GROUP BY id ORDER BY id; +---+-------------+ | id|sum(quantity)| +---+-------------+ |100| 32| |200| 33| |300| 13| +---+-------------+ -- Use column position in GROUP by clause. SELECT id, sum(quantity) FROM dealer GROUP BY 1 ORDER BY 1; +---+-------------+ | id|sum(quantity)| +---+-------------+ |100| 32| |200| 33| |300| 13| +---+-------------+ -- Multiple aggregations. -- 1. Sum of quantity per dealership. -- 2. Max quantity per dealership. SELECT id, sum(quantity) AS sum, max(quantity) AS max FROM dealer GROUP BY id ORDER BY id; +---+---+---+ | id|sum|max| +---+---+---+ |100| 32| 15| |200| 33| 20| |300| 13| 8| +---+---+---+ -- Count the number of distinct dealer cities per car_model. SELECT car_model, count(DISTINCT city) AS count FROM dealer GROUP BY car_model; +------------+-----+ | car_model|count| +------------+-----+ | Honda Civic| 3| | Honda CRV| 2| |Honda Accord| 3| +------------+-----+ -- Sum of only 'Honda Civic' and 'Honda CRV' quantities per dealership. SELECT id, sum(quantity) FILTER ( WHERE car_model IN ('Honda Civic', 'Honda CRV') ) AS `sum(quantity)` FROM dealer GROUP BY id ORDER BY id; +---+-------------+ | id|sum(quantity)| +---+-------------+ |100| 17| |200| 23| |300| 5| +---+-------------+ -- Aggregations using multiple sets of grouping columns in a single statement. -- Following performs aggregations based on four sets of grouping columns. -- 1. city, car_model -- 2. city -- 3. car_model -- 4. Empty grouping set. Returns quantities for all city and car models. SELECT city, car_model, sum(quantity) AS sum FROM dealer GROUP BY GROUPING SETS ((city, car_model), (city), (car_model), ()) ORDER BY city; +---------+------------+---+ | city| car_model|sum| +---------+------------+---+ | null| null| 78| | null| HondaAccord| 33| | null| HondaCRV| 10| | null| HondaCivic| 35| | Dublin| null| 33| | Dublin| HondaAccord| 10| | Dublin| HondaCRV| 3| | Dublin| HondaCivic| 20| | Fremont| null| 32| | Fremont| HondaAccord| 15| | Fremont| HondaCRV| 7| | Fremont| HondaCivic| 10| | San Jose| null| 13| | San Jose| HondaAccord| 8| | San Jose| HondaCivic| 5| +---------+------------+---+ -- Group by processing with `ROLLUP` clause. -- Equivalent GROUP BY GROUPING SETS ((city, car_model), (city), ()) SELECT city, car_model, sum(quantity) AS sum FROM dealer GROUP BY city, car_model WITH ROLLUP ORDER BY city, car_model; +---------+------------+---+ | city| car_model|sum| +---------+------------+---+ | null| null| 78| | Dublin| null| 33| | Dublin| HondaAccord| 10| | Dublin| HondaCRV| 3| | Dublin| HondaCivic| 20| | Fremont| null| 32| | Fremont| HondaAccord| 15| | Fremont| HondaCRV| 7| | Fremont| HondaCivic| 10| | San Jose| null| 13| | San Jose| HondaAccord| 8| | San Jose| HondaCivic| 5| +---------+------------+---+ -- Group by processing with `CUBE` clause. -- Equivalent GROUP BY GROUPING SETS ((city, car_model), (city), (car_model), ()) SELECT city, car_model, sum(quantity) AS sum FROM dealer GROUP BY city, car_model WITH CUBE ORDER BY city, car_model; +---------+------------+---+ | city| car_model|sum| +---------+------------+---+ | null| null| 78| | null| HondaAccord| 33| | null| HondaCRV| 10| | null| HondaCivic| 35| | Dublin| null| 33| | Dublin| HondaAccord| 10| | Dublin| HondaCRV| 3| | Dublin| HondaCivic| 20| | Fremont| null| 32| | Fremont| HondaAccord| 15| | Fremont| HondaCRV| 7| | Fremont| HondaCivic| 10| | San Jose| null| 13| | San Jose| HondaAccord| 8| | San Jose| HondaCivic| 5| +---------+------------+---+ --Prepare data for ignore nulls example CREATE TABLE person (id INT, name STRING, age INT); INSERT INTO person VALUES (100, 'Mary', NULL), (200, 'John', 30), (300, 'Mike', 80), (400, 'Dan', 50); --Select the first row in column age SELECT FIRST(age) FROM person; +--------------------+ | first(age, false) | +--------------------+ | NULL | +--------------------+ --Get the first row in column `age` ignore nulls,last row in column `id` and sum of column `id`. SELECT FIRST(age IGNORE NULLS), LAST(id), SUM(id) FROM person; +-------------------+------------------+----------+ | first(age, true) | last(id, false) | sum(id) | +-------------------+------------------+----------+ | 30 | 400 | 1000 | +-------------------+------------------+----------+