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, aSELECT
cláusula só pode conter o subconjunto de propriedades e funções do sistema incluídas naGROUP BY
cláusula. Uma exceção são asSELECT
funções agregadas, que podem aparecer na cláusula sem serem incluídas naGROUP BY
cláusula. Você também pode sempre incluir valores literais naSELECT
cláusula. - A
GROUP BY
cláusula deve ser posterior àSELECT
cláusula ,FROM
eWHERE
à cláusula e antes daOFFSET LIMIT
cláusula. Você não pode usarGROUP BY
com umaORDER 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)
- Propriedades de aliasing ou funções do sistema de aliasing (o aliasing ainda é permitido dentro da
- 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.