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 ответ
Если у вас нет данных, которые нужно сохранить.
Свойство списка проектов в виде отдельной таблицы
Class Object.Test Extends %Persistent { Property values As list of %Integer(STORAGEDEFAULT="array", SQLPROJECTION = "table/column"); }
Удалите данные, определение хранилища и перекомпилируйте класс.
Генерация данных.
Выполнить запрос SQL
SELECT "values", count(*) AS "count" FROM Object.Test_values GROUP BY "values"
(Необязательно) Добавить и построить индексы коллекции.
Заметки.
Это способ SQL. Вы также можете сделать это:
- путь объекта (перебрать объект и его свойства)
- глобальный путь (переберите глобальные значения и значения этого свойства)