Перейти к основному содержимому
Версия: 4.x

How-to: GROUP MAX/MIN/AGGR

Пример 1

Условие

Есть набор книг, для каждой из которых задан уникальный номер.

CLASS Book 'Книга';

id 'Номер' = DATA INTEGER (Book);

Необходимо найти максимальный номер книги.

Решение

maxId 'Максимальный номер' () = GROUP MAX id(Book b);

Пример 2

Условие

Аналогично Примеру 1.

Необходимо по номеру книги найти объект 'Книга'.

Решение

// Вариант 1
book1 'Книга' (INTEGER i) = GROUP MAX Book b BY id(b);

// Вариант 2
book2 'Книга' (INTEGER i) = GROUP AGGR Book b BY id(b);

Вариант 2 отличается от варианта 1 тем, что объявление этого свойства добавляет ограничение на уникальность номера для книги. При попытке добавить две книги с одинаковыми номерами будет выдано сообщение с ошибкой.

Пример 3

Условие

Есть набор книг, для каждой из которых задана категория и цена.

CLASS Category 'Категория';

category 'Категория' = DATA Category (Book);
price 'Цена' = DATA NUMERIC[10,2] (Book);

Нужно посчитать минимальную цену по категории.

Решение

minPrice 'Минимальная цена' (Category c) = GROUP MIN price(Book b) BY category(b);

Пример 4

Условие

Задан документ отгрузки книг.

CLASS Shipment 'Отгрузка';
CLASS ShipmentDetail 'Строка отгрузки';
shipment 'Отгрузка' = DATA Shipment (ShipmentDetail) NONULL DELETE;

book 'Книга' = DATA Book (ShipmentDetail);

Необходимо найти некоторую строку отгрузки по документу и книге.

Решение

shipmentDetail 'Строка отгрузки' (Shipment s, Book b) = GROUP MAX ShipmentDetail d BY shipment(d), book(d);

Этот свойство может использоваться для реализации функционала Подбор при вводе документа отгрузки.