GROUP BY (NoSQL クエリ)
適用対象: NoSQL
GROUP BY
句では、指定した 1 つ以上のプロパティの値に従ってクエリの結果を分割します。
構文
<group_by_clause> ::= GROUP BY <scalar_expression_list>
<scalar_expression_list> ::=
<scalar_expression>
| <scalar_expression_list>, <scalar_expression>
引数
説明 | |
---|---|
<scalar_expression_list> |
クエリ結果をグループ化 (または分割) するために使用される式を指定します。 |
<scalar_expression> |
スカラー サブクエリとスカラー集計を除き、任意のスカラー式を使用できます。 各スカラー式には、少なくとも 1 つのプロパティ参照が含まれている必要があります。 個々の式の数や各式のカーディナリティに制限はありません。 |
例
このセクションの例では、この項目の参照セットを使用します。 各項目には、softwareDevelopment
および mediaTrained
プロパティを含む可能性がある capabilities
オブジェクトが含まれます。
[
{
"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"
}
]
この最初の例では、指定されたプロパティの値を使用して項目のグループを作成するために GROUP BY
句を使用します。
SELECT
e.capabilities.softwareDevelopment AS developmentLang
FROM
employees e
GROUP BY
e.capabilities.softwareDevelopment
[
{},
{
"developmentLang": "c-sharp"
},
{
"developmentLang": "javascript"
},
{
"developmentLang": "python"
}
]
次の例では、グループごとの項目の合計数を指定するために、グループ化と共に集計システム関数 (COUNT
) を使用します。
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"
}
]
この最後の例では、項目は複数のプロパティを使用してグループ化されます。
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
}
]
解説
- クエリで
GROUP BY
句を使用する場合、SELECT
句には、GROUP BY
句に含まれるプロパティとシステム関数のサブセットのみを含めることができます。 1 つの例外は集計関数であり、これはGROUP BY
句の中に含めずにSELECT
句の中に記述できます。 リテラル値は常にSELECT
句の中に含めることができます。 GROUP BY
句はSELECT
、FROM
、WHERE
句の後、かつOFFSET LIMIT
句の前に置く必要があります。GROUP BY
句をORDER BY
句と共に使用することはできません。GROUP BY
句では、次の機能、プロパティ、または関数は使用できません。- エイリアス化プロパティまたはエイリアス化システム関数 (なお、エイリアス化は
SELECT
句内では許可されます) - サブクエリ
- 集計システム関数 (これらの関数は
SELECT
句内でのみ許可されます)
- エイリアス化プロパティまたはエイリアス化システム関数 (なお、エイリアス化は
- 集計システム関数を使用したクエリと
GROUP BY
を使用したサブクエリはサポートされていません。 - クロスパーティション
GROUP BY
クエリには、最大で 21 個の集計システム関数を含めることができます。