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 агрегатной системной функции.