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": "c-sharp"
},
{
"developmentLang": "javascript"
},
{
"developmentLang": "python"
}
]
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": 1
},
{
"trainedEmployees": 1,
"developmentLang": "c-sharp"
},
{
"trainedEmployees": 3,
"developmentLang": "javascript"
},
{
"trainedEmployees": 2,
"developmentLang": "python"
}
]
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áusulaSELECT
solo puede contener el subconjunto de propiedades y las funciones del sistema incluidas en la cláusulaGROUP BY
. Una excepción son las funciones de agregado, que pueden aparecer en la cláusulaSELECT
sin que se incluyan en la cláusulaGROUP BY
. También puede incluir siempre valores literales en la cláusulaSELECT
. - La cláusula
GROUP BY
debe ir después de las cláusulasSELECT
,FROM
yWHERE
y antes de la cláusulaOFFSET LIMIT
. No se puede usarGROUP BY
con una cláusulaORDER BY
. - La
GROUP BY
cláusula 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
)
- Propiedades de alias o funciones del sistema de alias (el alias sigue estando permitido en la cláusula
- 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.