GROUP BY (query NoSQL)
SI APPLICA A: NoSQL
La clausola GROUP BY
divide i risultati della query in base ai valori di una o più proprietà specificate.
Sintassi
<group_by_clause> ::= GROUP BY <scalar_expression_list>
<scalar_expression_list> ::=
<scalar_expression>
| <scalar_expression_list>, <scalar_expression>
Argomenti
Descrizione | |
---|---|
<scalar_expression_list> |
Specifica le espressioni utilizzate per raggruppare o dividere i risultati della query. |
<scalar_expression> |
È consentita qualsiasi espressione scalare ad eccezione di sottoquery scalari e aggregazioni scalari. Ogni espressione scalare deve includere almeno un riferimento a proprietà. Non esiste alcun limite al numero di singole espressioni o alla cardinalità di ogni espressione. |
Esempi
Per gli esempi in questa sezione, viene usato questo set di riferimenti di elementi. Ogni elemento include un capabilities
oggetto che può includere softwareDevelopment
e mediaTrained
proprietà.
[
{
"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"
}
]
In questo primo esempio, la GROUP BY
clausola viene usata per creare gruppi di elementi usando il valore di una proprietà specificata.
SELECT
e.capabilities.softwareDevelopment AS developmentLang
FROM
employees e
GROUP BY
e.capabilities.softwareDevelopment
[
{},
{
"developmentLang": "c-sharp"
},
{
"developmentLang": "javascript"
},
{
"developmentLang": "python"
}
]
In questo esempio seguente viene usata una funzione di sistema di aggregazione (COUNT
) con i raggruppamenti per fornire un numero totale di elementi per gruppo.
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"
}
]
In questo esempio finale gli elementi vengono raggruppati usando più proprietà.
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
}
]
Osservazioni:
- Quando una query usa una
GROUP BY
clausola , laSELECT
clausola può contenere solo il subset di proprietà e funzioni di sistema incluse nellaGROUP BY
clausola . Un'eccezione è costituita da funzioni di aggregazione, che possono essere visualizzate nellaSELECT
clausola senza essere incluse nellaGROUP BY
clausola . È anche possibile includere sempre valori letterali nellaSELECT
clausola . - La
GROUP BY
clausola deve essere successiva allaSELECT
clausola ,FROM
eWHERE
e prima dellaOFFSET LIMIT
clausola . Non è possibile usareGROUP BY
con unaORDER BY
clausola . - La
GROUP BY
clausola non consente alcuna delle funzionalità, delle proprietà o delle funzioni seguenti:- Aliasing di proprietà o funzioni di sistema di aliasing (l'aliasing è ancora consentito all'interno della
SELECT
clausola) - Subqueries (Sottoquery)
- Funzioni di sistema di aggregazione (queste funzioni sono consentite solo nella
SELECT
clausola )
- Aliasing di proprietà o funzioni di sistema di aliasing (l'aliasing è ancora consentito all'interno della
- Le query con una funzione di sistema di aggregazione e una sottoquery con
GROUP BY
non sono supportate. - Le query tra partizioni
GROUP BY
possono avere un massimo di 21 funzioni di sistema di aggregazione.
Contenuto correlato
- Clausola
ORDER BY
- Clausola
OFFSET LIMIT