Оператор UNGROUP
На данный момент оператор UNGROUP
не реализован
Оператор UNGROUP
- создание свойства, реализующее распределение в расширенной форме.
Синтаксис
UNGROUP
propertyId [BY groupExpr1, ..., groupExprM]
distributionType exPropertyId [BY exGroupExpr1, ..., exGroupExprM]
[ORDER [DESC] orderExpr1, ..., orderExprK]
[WHERE whereExpr]
где distributionType
может описан несколькими способами:
PROPORTION [STRICT] ROUND(digits)
LIMIT [STRICT]
Описание
Оператор UNGROUP
создает свойство, которое распределяет некоторое значение среди наборов объектов одной группы по принципу "много-ко-многим".
Первый блок BY
описывает группы, на которые будет разбиваться множество наборов объектов. Если блок BY
не указывается, то считается, что все наборы объектов входят в одну группу.
Второй блок BY
описывает дополнительные группы, по которым будет группироваться результат для проверки ограничений / вычисления пропорций. Если второй блок BY
не указывается, то считается, что все наборы объектов входят в одну группу.
Блок ORDER
определяет порядок, в котором будет проходить распределение. Заданный порядок должен быть однозначно определяемым.
Блок WHERE
определяет условие, при котором наборы объектов будут участвовать в операции распределения.
Параметры
propertyId
Идентификатор распределяемого свойства. Значение этого свойства должно быть числового типа, а количество параметров должно совпадать с количеством группировок в блоке BY
. При выполнении на вход этому свойству будут переданы объекты, идентифицирующие некоторую группу наборов объектов.
-
groupExpr1, ..., groupExprM
Список группи ровочных выражений (группировок).
-
distributionType
Тип распределения. Бывают следующих видов:
-
PROPORTION
Ключевое слово, указывающее на использование пропорционального распределения. В этом случае значение распределяемого свойства для конкретной группы будет распределено пропорционально среди наборов объектов, входящих в группу. Пропорция задается выражением
expr
, указываемым после указания типа распределения.-
STRICT
Ключевое слово, при указании которого значение распределяемого свойства должно быть точно (без остатка) расписано по наборам объектов, входящих в группу. Если в результате распределения остается некоторый остаток (который может быть и отрицательным), то он будет добавлен первому набору объектов в соответствии с указанным порядком в блоке
ORDER
. -
ROUND(digits)
Указывает до какого знака будет округлено значение свойства.
-
digits
Целочисленный литерал, указывающий количество знаков после запятой.
-
-
-
LIMIT
Ключевое слово, указывающее на использование распределения с указанными лимитами. В этом случае значение распределяемого свойства сначала устанавливается для первого из наборов объектов, если для этого набора превышается лимит, то для первого набора объектов устанавливается этот лимит, а остаток значения распределяемого свойства устанавливается для второго набора объектов, затем проверяется на превышение лимита для второй группы объектов и т. д. Лимит задается выражением
expr
, указываемым после указания типа распределения-
STRICT
Ключевое слово, при указании которого значение распределяемого свойства должно быть точно (без остатка) расписано по наборам объектов, входящих в группу. Если в результате распределении остается некоторый остаток, то он будет добавлен последнему набору объектов в соответствии с указанным порядком в блоке
ORDER
.
-
-
-
exPropertyId
Идентификатор свойства, которое для распределения с типом
PROPORTION
определяет пропорцию, а с типомLIMIT
определяет лимиты. Значение этого свойства должно быть числового типа, а количество параметров должно совпадать с количеством группировок во втором блокеBY
. -
exGroupExpr1, ..., exGroupExprM
Список дополнительных группировочных выражений (дополнительных группировок).
-
DESC
Ключевое слово. Указывает на обратный порядок просмотра наборов объектов.
-
orderExpr1, ..., orderExprK
Список выражений, определяющих порядок, в котором будут просматриваться наборы объектов при вычислении агрегирующей функции либо при распределении. Для определения порядка сначала используется значение первого выражения, затем при равенстве используется значение второго и т. д.
-
whereExpr
Фильтрующее выражение. В группировке будут участвовать только те наборы объектов, для которых значение фильтрующего выражения не равно
NULL
.