GROUP BY (consulta NoSQL)

SE APLICA A: NoSQL

La cláusula GROUP BY divide los resultados de la consulta de acuerdo con los valores de una o varias propiedades especificadas.

Sintaxis

<group_by_clause> ::= GROUP BY <scalar_expression_list>

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

Argumentos

Descripción
<scalar_expression_list> Especifica las expresiones que se usan para agrupar (o dividir) los resultados de la consulta.
<scalar_expression> Se permite cualquier expresión escalar, excepto para las subconsultas escalares y los agregados escalares. Cada expresión escalar debe contener al menos una referencia de propiedad. No hay ningún límite en cuanto al número de expresiones individuales o la cardinalidad de cada expresión.

Ejemplos

Para los ejemplos de esta sección, se usa este conjunto de referencias de elementos. Cada elemento incluye un objeto capabilities que puede incluir propiedades softwareDevelopment y 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"
  }
]

En este primer ejemplo, la cláusula GROUP BY se usa para crear grupos de elementos usando el valor de una propiedad especificada.

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

En el siguiente ejemplo, se usa una función agregada del sistema (COUNT) con las agrupaciones para obtener un número total de elementos 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
  }
]

En este ejemplo final, los elementos se agrupan mediante varias propiedades.

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

Observaciones

  • Cuando una consulta utiliza una cláusula GROUP BY, la cláusula SELECT solo puede contener el subconjunto de propiedades y las funciones del sistema incluidas en la cláusula GROUP BY. Una excepción son las funciones de agregado, que pueden aparecer en la cláusula SELECT sin que se incluyan en la cláusula GROUP BY. También puede incluir siempre valores literales en la cláusula SELECT.
  • La cláusula GROUP BY debe ir después de las cláusulas SELECT, FROM y WHERE y antes de la cláusula OFFSET LIMIT. No se puede usar GROUP BY con una cláusula ORDER BY.
  • La cláusula GROUP BY no permite ninguna de las siguientes características, propiedades o funciones:
    • Propiedades de alias o funciones del sistema de alias (el alias sigue estando permitido en la cláusula SELECT)
    • Subconsultas
    • Funciones agregadas del sistema (estas funciones solo están permitidas en la cláusula SELECT)
  • No se admiten las consultas con una función del sistema agregada y una subconsulta con GROUP BY.
  • Las consultas de GROUP BY entre particiones pueden tener un máximo de 21 funciones de agregado del sistema.