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> Допускается любое скалярное выражение за исключением вложенных запросов и статистических выражений. Каждое скалярное выражение должно содержать ссылку хотя бы на один столбец. Количество отдельных выражений или кратность каждого выражения не ограничены.

Примеры

В примерах в этом разделе используется этот ссылочный набор элементов. Каждый элемент содержит capabilities объект , который может включать softwareDevelopment свойства и mediaTrained .

[
  {
    "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": "python"
  },
  {
    "developmentLang": "javascript"
  },
  {
    "developmentLang": "c-sharp"
  },
  {}
]

В следующем примере агрегатная системная функция (COUNT) используется с группами для предоставления общего количества элементов в группе.

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
  }
]

В этом последнем примере элементы группируются с помощью нескольких свойств.

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 в предложение . Одним из исключений являются агрегатные функции, которые могут отображаться в предложении SELECT без включения в GROUP BY предложение . Вы также всегда можете включить литеральные значения в SELECT предложение .
  • Предложение GROUP BY должно быть после SELECTпредложения , FROMи WHERE и перед предложением OFFSET LIMIT . Нельзя использовать GROUP BY с предложением ORDER BY .
  • Предложение GROUP BY не позволяет использовать следующие функции, свойства или функции:
    • Псевдонимы свойств или системных функций псевдонимов (псевдонимы по-прежнему разрешены в предложении SELECT )
    • Подзапросы
    • Агрегатные системные функции (эти функции разрешены только в предложении SELECT )
  • Запросы с агрегатной системной функцией и вложенным запросом с GROUP BY не поддерживаются.
  • Межсекционные GROUP BY запросы могут иметь не более 21 агрегатной системной функции.