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 句は SELECTFROMWHERE 句の後、かつ OFFSET LIMIT 句の前に置く必要があります。 GROUP BY 句を ORDER BY 句と共に使用することはできません。
  • GROUP BY句では、次の機能、プロパティ、または関数は使用できません。
    • エイリアス化プロパティまたはエイリアス化システム関数 (なお、エイリアス化は SELECT 句内では許可されます)
    • サブクエリ
    • 集計システム関数 (これらの関数は SELECT 句内でのみ許可されます)
  • 集計システム関数を使用したクエリと GROUP BY を使用したサブクエリはサポートされていません。
  • クロスパーティション GROUP BY クエリには、最大で 21 個の集計システム関数を含めることができます。