GROUP BY (dotaz NoSQL)
PLATÍ PRO: NoSQL
Klauzule GROUP BY
rozdělí výsledky dotazu podle hodnot jedné nebo více zadaných vlastností.
Syntaxe
<group_by_clause> ::= GROUP BY <scalar_expression_list>
<scalar_expression_list> ::=
<scalar_expression>
| <scalar_expression_list>, <scalar_expression>
Argumenty
Popis | |
---|---|
<scalar_expression_list> |
Určuje výrazy, které se používají k seskupení (nebo dělení) výsledků dotazu. |
<scalar_expression> |
Jakýkoli skalární výraz je povolený s výjimkou skalárních poddotazů a skalárních agregací. Každý skalární výraz musí obsahovat alespoň jeden odkaz na vlastnost. Počet jednotlivých výrazů ani kardinalita jednotlivých výrazů není nijak omezen. |
Příklady
V příkladech v této části se používá tato referenční sada položek. Každá položka obsahuje capabilities
objekt, který může obsahovat softwareDevelopment
a mediaTrained
vlastnosti.
[
{
"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"
}
]
V tomto prvním příkladu GROUP BY
se klauzule používá k vytvoření skupin položek pomocí hodnoty zadané vlastnosti.
SELECT
e.capabilities.softwareDevelopment AS developmentLang
FROM
employees e
GROUP BY
e.capabilities.softwareDevelopment
[
{},
{
"developmentLang": "c-sharp"
},
{
"developmentLang": "javascript"
},
{
"developmentLang": "python"
}
]
V tomto dalším příkladu se pomocí agregační systémové funkce (COUNT
) se seskupováním poskytne celkový počet položek na skupinu.
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"
}
]
V tomto posledním příkladu jsou položky seskupené pomocí více vlastností.
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
}
]
Poznámky
- Pokud dotaz používá
GROUP BY
klauzuli,SELECT
může klauzule obsahovat pouze podmnožinu vlastností a systémových funkcí zahrnutých v klauzuliGROUP BY
. Jednou z výjimek je agregační funkce, které se mohou objevit vSELECT
klauzuli bez zahrnutí doGROUP BY
klauzule. Do klauzule můžete také vždy zahrnout hodnoty literálůSELECT
. - Klauzule
GROUP BY
musí být za klauzulíSELECT
,FROM
aWHERE
před klauzulíOFFSET LIMIT
. Nemůžete použítGROUP BY
s klauzulíORDER BY
. - Klauzule
GROUP BY
neumožňuje žádné z následujících funkcí, vlastností nebo funkcí:- Vlastnosti aliasingu nebo systémové funkce aliasingu (aliasing je stále povolený v rámci
SELECT
klauzule) - Poddotazy
- Agregační systémové funkce (tyto funkce jsou povoleny pouze v klauzuli
SELECT
)
- Vlastnosti aliasingu nebo systémové funkce aliasingu (aliasing je stále povolený v rámci
- Dotazy s agregační systémovou funkcí a poddotazem
GROUP BY
se nepodporují. - Dotazy napříč oddíly
GROUP BY
můžou mít maximálně 21 agregačních systémových funkcí.