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.
Contenu connexe
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour