InterSystems Caché:如何计算 table 中列表中值的相遇次数?

InterSystems Caché: How to count encounters of values in list in table?

我是 Caché 的新手,被要求计算 table 列表中值的相遇次数。例如,table 看起来像这样:

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定义

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

table 的输出必须如下所示:

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

但我不知道该怎么做

编辑 添加了 class 定义

假设您没有需要保存的数据。

  1. Project 单独列出 属性 table

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

  2. 删除数据、存储定义并重新编译class。

  3. 生成数据。

  4. 执行SQL查询

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

  5. (可选)添加并构建 collection 索引。

注释。

这就是 SQL 方式。你也可以这样做:

  • 对象方式(遍历对象及其属性)
  • 全局方式(遍历全局和这个 属性 值)

Caché commmunity forum.