Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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-satsSELECTkan 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 BYmåste vara efterSELECT- ,FROMochWHERE-satsen och föreOFFSET LIMIT-satsen. Du kan inte användaGROUP BYmed enORDER BYsats. - Satsen
GROUP BYtillåter inte någon av följande funktioner, egenskaper eller funktioner:- Aliasegenskaper eller aliassystemfunktioner (alias tillåts
SELECTfortfarande i -satsen) - Underfrågor
- Aggregerade systemfunktioner (dessa funktioner tillåts endast i -
SELECTsatsen)
- Aliasegenskaper eller aliassystemfunktioner (alias tillåts
- Frågor med en aggregerad systemfunktion och en underfråga med
GROUP BYstöds inte. - Frågor mellan partitioner
GROUP BYkan ha högst 21 aggregerade systemfunktioner.