다음을 통해 공유


GROUP BY(NoSQL 쿼리)

적용 대상: NoSQL

GROUP BY 절은 하나 이상의 지정된 속성 값에 따라 쿼리의 결과를 나눕니다.

구문

<group_by_clause> ::= GROUP BY <scalar_expression_list>

<scalar_expression_list> ::=
          <scalar_expression>
        | <scalar_expression_list>, <scalar_expression>

인수

설명
<scalar_expression_list> 쿼리 결과를 그룹화(또는 나누기)하는 데 사용되는 식을 지정합니다.
<scalar_expression> 스칼라 하위 쿼리 및 스칼라 집계를 제외한 모든 스칼라 식이 허용됩니다. 각 스칼라 식에는 적어도 하나 이상의 속성 참조가 포함되어야 합니다. 개별 식의 수나 각 식의 카디널리티에는 제한이 없습니다.

예제

이 섹션의 예제에서는 이 참조 항목 집합이 사용됩니다. 각 항목에는 softwareDevelopmentmediaTrained 속성을 포함할 수 있는 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 절에 포함된 속성 및 시스템 함수의 하위 집합만 포함할 수 있습니다. 한 가지 예외는 집계 함수이며, 이는 GROUP BY 절에 포함되지 않고 SELECT 절에 나타날 수 있습니다. SELECT 절에는 항상 리터럴 값을 포함할 수도 있습니다.
  • GROUP BY 절은 SELECT, FROMWHERE 절 뒤에 있고 OFFSET LIMIT 절 앞에 있어야 합니다. ORDER BY 절에는 GROUP BY를 사용할 수 없습니다.
  • 절은 GROUP BY 다음 기능, 속성 또는 함수를 허용하지 않습니다.
    • 속성 별칭 지정 또는 시스템 함수 별칭 지정(SELECT 절 내의 별칭 지정은 계속 허용됨)
    • 하위 쿼리
    • 집계 시스템 함수(이러한 함수는 SELECT 절에서만 허용됨)
  • 집계 시스템 함수를 사용하는 쿼리와 GROUP BY를 사용하는 하위 쿼리는 지원되지 않습니다.
  • 파티션 간 GROUP BY 쿼리는 최대 21개의 집계 시스템 함수를 포함할 수 있습니다.