GROUP BY (NoSQL-query)
VAN TOEPASSING OP: NoSQL
De component GROUP BY
verdeelt de resultaten van de query op basis van de waarden van een of meer opgegeven eigenschappen.
Syntaxis
<group_by_clause> ::= GROUP BY <scalar_expression_list>
<scalar_expression_list> ::=
<scalar_expression>
| <scalar_expression_list>, <scalar_expression>
Argumenten
Beschrijving | |
---|---|
<scalar_expression_list> |
Hiermee geeft u de expressies op die worden gebruikt om queryresultaten te groeperen (of te delen). |
<scalar_expression> |
Alle scalaire expressies zijn toegestaan, met uitzondering van scalaire subquery's en scalaire aggregaties. Elke scalaire expressie moet ten minste één eigenschapsreferentie bevatten. Er is geen limiet voor het aantal afzonderlijke expressies of de kardinaliteit van elke expressie. |
Voorbeelden
Voor de voorbeelden in deze sectie wordt deze referentieset met items gebruikt. Elk item bevat een capabilities
object dat kan bevatten en mediaTrained
eigenschappen kan bevattensoftwareDevelopment
.
[
{
"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 dit eerste voorbeeld wordt de GROUP BY
component gebruikt om groepen items te maken met behulp van de waarde van een opgegeven eigenschap.
SELECT
e.capabilities.softwareDevelopment AS developmentLang
FROM
employees e
GROUP BY
e.capabilities.softwareDevelopment
[
{},
{
"developmentLang": "c-sharp"
},
{
"developmentLang": "javascript"
},
{
"developmentLang": "python"
}
]
In dit volgende voorbeeld wordt een statistische systeemfunctie (COUNT
) gebruikt met de groeperingen om een totaal aantal items per groep op te geven.
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 dit laatste voorbeeld worden de items gegroepeerd met behulp van meerdere eigenschappen.
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
}
]
Opmerkingen
- Wanneer een query een
GROUP BY
component gebruikt, kan deSELECT
component alleen de subset van eigenschappen en systeemfuncties bevatten die zijn opgenomen in deGROUP BY
component. Een uitzondering hierop zijn statistische functies, die in deSELECT
component kunnen worden weergegeven zonder dat ze in deGROUP BY
component worden opgenomen. U kunt ook altijd letterlijke waarden opnemen in deSELECT
component. - De
GROUP BY
component moet na deSELECT
,FROM
enWHERE
component en vóór deOFFSET LIMIT
component staan. U kunt niet gebruikenGROUP BY
met eenORDER BY
component. - De
GROUP BY
component staat geen van de volgende functies, eigenschappen of functies toe:- Aliaseigenschappen of aliasingsysteemfuncties (aliasing is nog steeds toegestaan binnen de
SELECT
component) - Subquery's
- Statistische systeemfuncties (deze functies zijn alleen toegestaan in de
SELECT
component)
- Aliaseigenschappen of aliasingsysteemfuncties (aliasing is nog steeds toegestaan binnen de
- Query's met een statistische systeemfunctie en een subquery met
GROUP BY
worden niet ondersteund. - Query's tussen partities
GROUP BY
kunnen maximaal 21 statistische systeemfuncties hebben.