GROUP BY (NoSQL-fråga)
GÄLLER FÖR: NoSQL
Satsen GROUP BY
delar upp frågans resultat enligt värdena för en eller flera angivna egenskaper.
Syntax
<group_by_clause> ::= GROUP BY <scalar_expression_list>
<scalar_expression_list> ::=
<scalar_expression>
| <scalar_expression_list>, <scalar_expression>
Argument
beskrivning | |
---|---|
<scalar_expression_list> |
Anger de uttryck som används för att gruppera (eller dela upp) frågeresultat. |
<scalar_expression> |
Alla skalära uttryck tillåts förutom skalära underfrågor och skalära aggregeringar. Varje skalärt uttryck måste innehålla minst en egenskapsreferens. Det finns ingen gräns för antalet enskilda uttryck eller kardinaliteten för varje uttryck. |
Exempel
För exemplen i det här avsnittet används den här referensuppsättningen med objekt. Varje objekt innehåller ett capabilities
objekt som kan innehålla softwareDevelopment
och mediaTrained
egenskaper.
[
{
"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"
}
]
I det första exemplet GROUP BY
används -satsen för att skapa grupper av objekt med hjälp av värdet för en angiven egenskap.
SELECT
e.capabilities.softwareDevelopment AS developmentLang
FROM
employees e
GROUP BY
e.capabilities.softwareDevelopment
[
{},
{
"developmentLang": "c-sharp"
},
{
"developmentLang": "javascript"
},
{
"developmentLang": "python"
}
]
I nästa exempel används en aggregerad systemfunktion (COUNT
) med grupperingarna för att tillhandahålla ett totalt antal objekt per grupp.
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"
}
]
I det här sista exemplet grupperas objekten med flera egenskaper.
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
}
]
Kommentarer
- När en fråga använder en
GROUP BY
-satsSELECT
kan satsen bara innehålla delmängden av egenskaper och systemfunktioner som ingår iGROUP BY
-satsen. Ett undantag är aggregeringsfunktioner, som kan visas iSELECT
-satsen utan att inkluderas iGROUP BY
-satsen. Du kan också alltid inkludera literalvärden iSELECT
-satsen. - Satsen
GROUP BY
måste vara efterSELECT
- ,FROM
ochWHERE
-satsen och föreOFFSET LIMIT
-satsen. Du kan inte användaGROUP BY
med enORDER BY
sats. - Satsen
GROUP BY
tillåter inte någon av följande funktioner, egenskaper eller funktioner:- Aliasegenskaper eller aliassystemfunktioner (alias tillåts
SELECT
fortfarande i -satsen) - Underfrågor
- Aggregerade systemfunktioner (dessa funktioner tillåts endast i -
SELECT
satsen)
- Aliasegenskaper eller aliassystemfunktioner (alias tillåts
- Frågor med en aggregerad systemfunktion och en underfråga med
GROUP BY
stöds inte. - Frågor mellan partitioner
GROUP BY
kan ha högst 21 aggregerade systemfunktioner.