Vue d’ensemble
La clause GROUP BY
vous permet de spécifier l'ensemble des clés de regroupement à utiliser lors du regroupement sur la table finale.
<return statement> ::=
"RETURN" [ "DISTINCT" ] { <"*"> | <return item list> }
[ <group by clause> ]
<group by clause> ::= "GROUP BY" <grouping key list>
<grouping key list> ::=
<grouping key> [ { "," <grouping key> }... ]
<grouping key> ::= <binding variable>
Détails
- Chaque clé de regroupement doit être une variable liée. Si la clé de regroupement souhaitée n'est pas déjà une variable liée existante, vous avez deux options :
- Renommer en utilisant
AS
: Si la clé de regroupement fait partie de la table de résultat finale, vous pouvez renommer la colonne correspondante en utilisant le mot-cléAS
. - Utiliser
LET
: Alternativement, vous pouvez utiliser l'instructionLET
pour définir une nouvelle variable pour la clé de regroupement avant l'instructionRETURN
, en vous assurant qu'elle est disponible pour le regroupement.
- Renommer en utilisant
- Après le regroupement, un seul enregistrement par groupe sera retourné.
- Lorsqu'un regroupement est impliqué, toute opération d'agrégation dans l'instruction
RETURN
est appliquée à chaque groupe après que le regroupement soit effectué.
Exemple de Graph
Les exemples suivants s'exécutent contre ce graph :
Pour créer ce graph, exécutez la requête suivante contre un graph vide :
INSERT (alex:Student {_id: 's1', name: 'Alex', gender: 'male'}),
(susan:Student {_id: 's2', name: 'Susan', gender: 'female'}),
(alex2:Student {_id: 's3', name: 'Alex', gender: 'female'}),
(art:Course {_id: 'c1', name: 'Art', credit: 13}),
(literature:Course {_id: 'c2', name: 'Literature', credit: 15}),
(alex)-[:Take {year: 2024, term: 'Spring'}]->(art),
(alex2)-[:Take {year: 2023, term: 'Fall'}]->(art),
(susan)-[:Take {year: 2023, term: 'Fall'}]->(art),
(susan)-[:Take {year: 2023, term: 'Spring'}]->(literature)
Regroupement par une Clé
MATCH (:Student)->(c:Course)
RETURN c GROUP BY c
Résultat: c
_id | _uuid | schema | values |
---|---|---|---|
c1 | Sys-gen | Course | {name: "Art", credit: 13} |
c2 | Sys-gen | Course | {name: "Literature", credit: 15} |
Regroupement par Alias de Colonne
Dans cette requête, la clé de regroupement Name
est l'alias de colonne de n.name
:
MATCH (n:Student)
RETURN n.name AS Name GROUP BY Name
Résultat:
Name |
---|
Alex |
Susan |
La requête suivante génère une erreur de syntaxe car la clé de regroupement n.name
n'est pas une variable liée :
MATCH (n:Student)
RETURN n.name GROUP BY n.name
Regroupement par Variables Définies par LET
Dans cette requête, la clé de regroupement Gender
est définie par l'instruction LET
:
MATCH (n:Student)
LET Gender = n.gender
RETURN n GROUP BY Gender
Résultat:
n |
---|
(:Student {_id: "s1", gender: "male", name: "Alex"}) |
(:Student {_id: "s3", gender: "female", name: "Alex"}) |
La requête suivante génère une erreur de syntaxe car la clé de regroupement n.gender
n'est pas une variable liée :
MATCH (n:Student)
RETURN n GROUP BY n.gender
Regroupement avec Agrégation
MATCH (n:Student)
RETURN n.name AS Name, count(n) GROUP BY Name
Résultat:
Name | count(n) |
---|---|
Alex | 2 |
Susan | 1 |
Regroupement par Plusieurs Clés
MATCH ({_id: "c1"})<-[e:Take]-()
RETURN e.year AS Y, e.term AS T GROUP BY Y, T
Résultat:
Year | Term |
---|---|
2023 | Fall |
2024 | Spring |