Partage via


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": "python"
  },
  {
    "developmentLang": "javascript"
  },
  {
    "developmentLang": "c-sharp"
  },
  {}
]

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": 2,
    "developmentLang": "python"
  },
  {
    "trainedEmployees": 3,
    "developmentLang": "javascript"
  },
  {
    "trainedEmployees": 1,
    "developmentLang": "c-sharp"
  },
  {
    "trainedEmployees": 1
  }
]

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 clause SELECT ne peut contenir que le sous-ensemble de propriétés et de fonctions système incluses dans la clause GROUP BY. Une exception est faite pour les fonctions d'agrégation, qui peuvent apparaître dans la clauseSELECT sans être incluses dans la clause GROUP BY. Par ailleurs, vous pouvez toujours inclure des valeurs littérales dans la clause SELECT.
  • La clause GROUP BY doit être placée après la clause SELECT, FROM, et WHERE et avant la clause OFFSET LIMIT. Vous ne pouvez pas utiliser GROUP BY avec une clause ORDER BY.
  • La clause GROUP BY 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)
  • 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.