GROUP BY (NoSQL-Abfrage)
GILT FÜR: NoSQL
Die GROUP BY
-Klausel unterteilt die Ergebnisse der Abfrage anhand der Werte einer oder mehrerer angegebener Eigenschaften.
Syntax
<group_by_clause> ::= GROUP BY <scalar_expression_list>
<scalar_expression_list> ::=
<scalar_expression>
| <scalar_expression_list>, <scalar_expression>
Argumente
Beschreibung | |
---|---|
<scalar_expression_list> |
Gibt die Ausdrücke an, die zum Gruppieren (oder Unterteilen) von Abfrageergebnissen verwendet werden. |
<scalar_expression> |
Ein beliebiger Skalarausdruck ist außer für skalare Unterabfragen und skalare Aggregate zulässig. Jeder Skalarausdruck muss mindestens einen Verweis auf eine Eigenschaft enthalten. Es gibt keine Begrenzung bei der Anzahl von einzelnen Ausdrücken oder der Kardinalität des jeweiligen Ausdrucks. |
Beispiele
Für die Beispiele in diesem Abschnitt wird dieser Verweissatz von Elementen verwendet. Jedes Element enthält ein capabilities
-Objekt, das softwareDevelopment
- und mediaTrained
-Eigenschaften enthalten kann.
[
{
"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 diesem ersten Beispiel wird die GROUP BY
-Klausel verwendet, um Gruppen von Elementen mithilfe des Werts einer angegebenen Eigenschaft zu erstellen.
SELECT
e.capabilities.softwareDevelopment AS developmentLang
FROM
employees e
GROUP BY
e.capabilities.softwareDevelopment
[
{},
{
"developmentLang": "c-sharp"
},
{
"developmentLang": "javascript"
},
{
"developmentLang": "python"
}
]
In diesem nächsten Beispiel wird eine Aggregatsystemfunktion (COUNT
) mit den Gruppierungen verwendet, um eine Gesamtanzahl von Elementen pro Gruppe bereitzustellen.
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 diesem letzten Beispiel werden die Elemente mithilfe von mehreren Eigenschaften gruppiert.
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
}
]
Hinweise
- Wenn eine Abfrage eine
GROUP BY
-Klausel verwendet, kann dieSELECT
-Klausel nur die Teilmenge von Eigenschaften und Systemfunktionen enthalten, die in derGROUP BY
-Klausel enthalten ist. Eine Ausnahme bilden aggregierte Funktionen, die in derSELECT
-Klausel vorkommen können, ohne dass sie in derGROUP BY
-Klausel enthalten sind. Sie können in dieSELECT
-Klausel auch immer Literalwerte einbeziehen. - Die
GROUP BY
-Klausel muss hinter derSELECT
-,FROM
- undWHERE
-Klausel und vor derOFFSET LIMIT
-Klausel stehen. Sie könnenGROUP BY
bei einerORDER BY
-Klausel nicht verwenden. - Die
GROUP BY
Klausel lässt keine der folgenden Features, Eigenschaften oder Funktionen zu:- Aliasing von Eigenschaften oder Systemfunktionen (in der
SELECT
-Klausel ist Aliasing weiterhin zulässig) - Unterabfragen
- Aggregierte Systemfunktionen (diese Funktionen sind nur in der
SELECT
-Klausel zulässig)
- Aliasing von Eigenschaften oder Systemfunktionen (in der
- Abfragen mit einer Aggregatsystemfunktion und einer Unterabfrage mit
GROUP BY
werden nicht unterstützt. - Partitionsübergreifende
GROUP BY
-Abfragen können maximal 21 Aggregatsystemfunktionen enthalten.