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

Description
<scalar_expression_list> Especifica as expressões usadas para agrupar (ou dividir) os resultados da consulta.
<scalar_expression> Qualquer expressão escalar é permitida, exceto para subconsultas escalares e agregados 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 nesta seção, este conjunto de referência de itens é usado. Cada item inclui um capabilities objeto que pode incluir softwareDevelopment e mediaTrained propriedades.

[
  {
    "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"
  }
]

Neste primeiro exemplo, a GROUP BY cláusula é 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": "c-sharp"
  },
  {
    "developmentLang": "javascript"
  },
  {
    "developmentLang": "python"
  }
]

Neste próximo exemplo, uma função de sistema agregado (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": 1
  },
  {
    "trainedEmployees": 1,
    "developmentLang": "c-sharp"
  },
  {
    "trainedEmployees": 3,
    "developmentLang": "javascript"
  },
  {
    "trainedEmployees": 2,
    "developmentLang": "python"
  }
]

Neste exemplo final, os itens são agrupados usando várias 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
  }
]

Observações

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