GROUP BY (requête NoSQL)
S’APPLIQUE À : NoSQL
La clause GROUP BY
divise les résultats de la requête en fonction des valeurs d’une ou plusieurs propriétés spécifiées.
Syntaxe
<group_by_clause> ::= GROUP BY <scalar_expression_list>
<scalar_expression_list> ::=
<scalar_expression>
| <scalar_expression_list>, <scalar_expression>
Arguments
Description | |
---|---|
<scalar_expression_list> |
Spécifie les expressions utilisées pour regrouper (ou diviser) les résultats de requête. |
<scalar_expression> |
Toutes les expressions scalaires sont autorisées à l’exception des sous-requêtes scalaires et des agrégats scalaires. Chaque expression scalaire doit contenir au moins une référence de propriété. Il n’existe aucune limite quant au nombre d’expressions individuelles ou à la cardinalité de chaque expression. |
Exemples
Pour les exemples de cette section, cet ensemble d’éléments de référence est utilisé. Chaque élément inclut un capabilities
objet qui peut inclure des softwareDevelopment
propriétés et mediaTrained
.
[
{
"name": "Jordan Mitchell",
"capabilities": {
"softwareDevelopment": "python",
"mediaTrained": true
},
"team": "Cloud software engineering"
},
{
"name": "Mikaela Lee",
"capabilities": {
"softwareDevelopment": "javascript",
"mediaTrained": false
},
"team": "Cloud software engineering"
},
{
"name": "Graham Barnes",
"capabilities": {
"softwareDevelopment": "c-sharp",
"mediaTrained": true
},
"team": "Cloud software engineering"
},
{
"name": "Hayden Cook",
"capabilities": {
"softwareDevelopment": "javascript",
"mediaTrained": true
},
"team": "Cloud software engineering"
},
{
"name": "Morgan Connors",
"capabilities": {
"mediaTrained": true
},
"team": "Cloud software engineering"
},
{
"name": "Devon Torres",
"capabilities": {
"softwareDevelopment": "python",
"mediaTrained": false
},
"team": "Cloud software engineering"
},
{
"name": "Sam Centrell",
"capabilities": {
"softwareDevelopment": "javascript",
"mediaTrained": true
},
"team": "Cloud software engineering"
}
]
Dans ce premier exemple, la GROUP BY
clause est utilisée pour créer des groupes d’éléments à l’aide de la valeur d’une propriété spécifiée.
SELECT
e.capabilities.softwareDevelopment AS developmentLang
FROM
employees e
GROUP BY
e.capabilities.softwareDevelopment
[
{},
{
"developmentLang": "c-sharp"
},
{
"developmentLang": "javascript"
},
{
"developmentLang": "python"
}
]
Dans l’exemple suivant, une fonction système d’agrégation (COUNT
) est utilisée avec les regroupements pour fournir un nombre total d’éléments par groupe.
SELECT
COUNT(1) AS trainedEmployees,
e.capabilities.softwareDevelopment AS developmentLang
FROM
employees e
GROUP BY
e.capabilities.softwareDevelopment
[
{
"trainedEmployees": 1
},
{
"trainedEmployees": 1,
"developmentLang": "c-sharp"
},
{
"trainedEmployees": 3,
"developmentLang": "javascript"
},
{
"trainedEmployees": 2,
"developmentLang": "python"
}
]
Dans cet exemple final, les éléments sont regroupés à l’aide de plusieurs propriétés.
SELECT
COUNT(1) AS employeesWithThisTraining,
e.capabilities.softwareDevelopment AS developmentLang,
e.capabilities.mediaTrained AS mediaReady
FROM
employees e
GROUP BY
e.capabilities.softwareDevelopment,
e.capabilities.mediaTrained
[
{
"employeesWithThisTraining": 1,
"developmentLang": "python",
"mediaReady": true
},
{
"employeesWithThisTraining": 1,
"developmentLang": "javascript",
"mediaReady": false
},
{
"employeesWithThisTraining": 1,
"developmentLang": "c-sharp",
"mediaReady": true
},
{
"employeesWithThisTraining": 2,
"developmentLang": "javascript",
"mediaReady": true
},
{
"employeesWithThisTraining": 1,
"mediaReady": true
},
{
"employeesWithThisTraining": 1,
"developmentLang": "python",
"mediaReady": false
}
]
Notes
- Quand une requête utilise une clause
GROUP BY
, la clauseSELECT
ne peut contenir que le sous-ensemble de propriétés et de fonctions système incluses dans la clauseGROUP BY
. Une exception est faite pour les fonctions d'agrégation, qui peuvent apparaître dans la clauseSELECT
sans être incluses dans la clauseGROUP BY
. Par ailleurs, vous pouvez toujours inclure des valeurs littérales dans la clauseSELECT
. - La clause
GROUP BY
doit être placée après la clauseSELECT
,FROM
, etWHERE
et avant la clauseOFFSET LIMIT
. Vous ne pouvez pas utiliserGROUP BY
avec une clauseORDER BY
. - La
GROUP BY
clause n’autorise aucune des fonctionnalités, propriétés ou fonctions suivantes :- Propriétés d’alias ou fonctions système d’alias (l’alias est toujours autorisé dans la clause
SELECT
) - Sous-requêtes
- Fonctions système d’agrégation (ces fonctions sont uniquement autorisées dans la clause
SELECT
)
- Propriétés d’alias ou fonctions système d’alias (l’alias est toujours autorisé dans la clause
- Les requêtes comprenant une fonction système d’agrégation et une sous-requête avec
GROUP BY
ne sont pas prises en charge. - Les requêtes entre les partitions
GROUP BY
peuvent avoir un maximum de 21 fonctions système d’agrégation.