Compartilhar via


GROUP BY (consulta NoSQL)

APLICA-SE A: NoSQL

A cláusula GROUP BY divide os resultados da consulta de acordo com os valores de uma ou mais propriedades especificadas.

Sintaxe

<group_by_clause> ::= GROUP BY <scalar_expression_list>

<scalar_expression_list> ::=
          <scalar_expression>
        | <scalar_expression_list>, <scalar_expression>

Argumentos

Descrição
<scalar_expression_list> Especifica as expressões usadas para agrupar (ou dividir) os resultados de consultas.
<scalar_expression> Qualquer expressão escalar é permitida, exceto para subconsultas escalares e agregações escalares. Cada expressão escalar deve conter pelo menos uma referência de propriedade. Não há limite para o número de expressões individuais ou a cardinalidade de cada expressão.

Exemplos

Para os exemplos incluídos nessa seção, usamos esse conjunto de itens de referência. Cada item inclui um objeto capabilities que pode incluir as propriedades softwareDevelopment e 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"
  }
]

Nesse primeiro exemplo, a cláusula GROUP BY é usada para criar grupos de itens usando o valor de uma propriedade especificada.

SELECT 
    e.capabilities.softwareDevelopment AS developmentLang
FROM
    employees e
GROUP BY
    e.capabilities.softwareDevelopment
[
  {
    "developmentLang": "python"
  },
  {
    "developmentLang": "javascript"
  },
  {
    "developmentLang": "c-sharp"
  },
  {}
]

Nesse exemplo a seguir, uma função de sistema de agregação (COUNT) é usada com os agrupamentos para fornecer um número total de itens por grupo.

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
  }
]

Nesse exemplo final, os itens são agrupados usando diversas propriedades.

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
  }
]

Comentários

  • Quando uma consulta usa uma cláusula GROUP BY, a cláusula SELECT pode conter apenas o subconjunto de propriedades e funções do sistema incluídas na cláusula GROUP BY. Uma exceção são as funções de agregação, que podem aparecer na cláusula SELECT sem serem incluídas na cláusula GROUP BY. Você também pode incluir valores literais na cláusula SELECT.
  • A cláusula GROUP BY precisa estar após as cláusulas SELECT. FROM e WHERE e antes da cláusula OFFSET LIMIT. Você não pode usar GROUP BY com uma cláusula ORDER BY.
  • A GROUP BY cláusula não permite nenhum dos seguintes recursos, propriedades ou funções:
    • Propriedades de alias ou funções do sistema de alias (o alias ainda é permitido dentro da cláusula SELECT)
    • Subconsultas
    • Funções do sistema de agregação (essas funções são permitidas apenas na cláusula SELECT)
  • Não há suporte para consultas com uma função de sistema de agregação e uma subconsulta com GROUP BY.
  • As consultas GROUP BY entre várias partições podem ter um máximo de 21 funções do sistema de agregação.