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": "c-sharp"
},
{
"developmentLang": "javascript"
},
{
"developmentLang": "python"
}
]
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": 1
},
{
"trainedEmployees": 1,
"developmentLang": "c-sharp"
},
{
"trainedEmployees": 3,
"developmentLang": "javascript"
},
{
"trainedEmployees": 2,
"developmentLang": "python"
}
]
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áusulaSELECT
pode conter apenas o subconjunto de propriedades e funções do sistema incluídas na cláusulaGROUP BY
. Uma exceção são as funções de agregação, que podem aparecer na cláusulaSELECT
sem serem incluídas na cláusulaGROUP BY
. Você também pode incluir valores literais na cláusulaSELECT
. - A cláusula
GROUP BY
precisa estar após as cláusulasSELECT
.FROM
eWHERE
e antes da cláusulaOFFSET LIMIT
. Você não pode usarGROUP BY
com uma cláusulaORDER 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
)
- Propriedades de alias ou funções do sistema de alias (o alias ainda é permitido dentro da cláusula
- 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.