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
Description | |
---|---|
<scalar_expression_list> |
Hiermee geeft u de expressies op die worden gebruikt om queryresultaten te groeperen (of te verdelen). |
<scalar_expression> |
Elke scalaire expressie is 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 items gebruikt. Elk item bevat een capabilities
object dat eigenschappen kan mediaTrained
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": "python"
},
{
"developmentLang": "javascript"
},
{
"developmentLang": "c-sharp"
},
{}
]
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": 2,
"developmentLang": "python"
},
{
"trainedEmployees": 3,
"developmentLang": "javascript"
},
{
"trainedEmployees": 1,
"developmentLang": "c-sharp"
},
{
"trainedEmployees": 1
}
]
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 kunnen worden weergegeven in deSELECT
-component 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
component ,FROM
enWHERE
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 aliasing van systeemfuncties (aliasing is nog steeds toegestaan binnen de
SELECT
component) - Subquery's
- Statistische systeemfuncties (deze functies zijn alleen toegestaan in de
SELECT
component)
- Aliaseigenschappen of aliasing van systeemfuncties (aliasing is nog steeds toegestaan binnen de
- Query's met een statistische systeemfunctie en een subquery met
GROUP BY
worden niet ondersteund. - Query's voor meerdere partities
GROUP BY
kunnen maximaal 21 statistische systeemfuncties hebben.