GROUP BY (запрос NoSQL)
ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL
Предложение GROUP BY
разделяет результаты запроса по значениям одного или нескольких указанных свойств.
Синтаксис
<group_by_clause> ::= GROUP BY <scalar_expression_list>
<scalar_expression_list> ::=
<scalar_expression>
| <scalar_expression_list>, <scalar_expression>
Аргументы
Description | |
---|---|
<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": "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
предложение. Одним из исключений является агрегатные функции, которые могут отображаться вSELECT
предложенииGROUP BY
без включения в предложение. Вы также можете включать литеральные значения вSELECT
предложение. - Предложение
GROUP BY
должно быть послеSELECT
предложения ,FROM
иWHERE
предложения и перед предложениемOFFSET LIMIT
. Нельзя использоватьGROUP BY
с предложениемORDER BY
. - Предложение
GROUP BY
не разрешает какие-либо из следующих функций, свойств или функций:- Псевдонимы свойств или системные функции псевдонима (псевдоним по-прежнему разрешен в предложении
SELECT
) - Подзапросы
- Агрегатные системные функции (эти функции разрешены только в предложении
SELECT
)
- Псевдонимы свойств или системные функции псевдонима (псевдоним по-прежнему разрешен в предложении
- Запросы с агрегатной системной функцией и вложенным запросом
GROUP BY
не поддерживаются. - Межсекционные
GROUP BY
запросы могут иметь не более 21 системных функций.