InterSystems Caché: Как подсчитать совпадения значений в списке в таблице?

Я очень новичок в Caché, и меня попросили подсчитать количество встреч значений в списке в таблице. Например, таблица выглядит так:

id | values
-------------------
1  | {1, 2}
2  | {1, 3, 4, 4, 5}
3  | {1, 2, 5}
4  | {1, 2, 2, 4, 5}
5  | {2, 1, 4}

Определение класса

Class Object.Test Extends %Persistent
{
  Property values As list of %Integer
}

И вывод для этой таблицы должен выглядеть так:

value | count
--------------
 1    |   5
 2    |   5
 3    |   1
 4    |   4
 5    |   3

Но я понятия не имею, как это сделать

РЕДАКТИРОВАТЬ Добавлено определение класса

1 ответ

Решение

Если у вас нет данных, которые нужно сохранить.

  1. Свойство списка проектов в виде отдельной таблицы

    Class Object.Test Extends %Persistent { Property values As list of %Integer(STORAGEDEFAULT="array", SQLPROJECTION = "table/column"); }

  2. Удалите данные, определение хранилища и перекомпилируйте класс.

  3. Генерация данных.

  4. Выполнить запрос SQL

    SELECT "values", count(*) AS "count" FROM Object.Test_values GROUP BY "values"

  5. (Необязательно) Добавить и построить индексы коллекции.

Заметки.

Это способ SQL. Вы также можете сделать это:

  • путь объекта (перебрать объект и его свойства)
  • глобальный путь (переберите глобальные значения и значения этого свойства)

Форум сообщества Caché.

Другие вопросы по тегам