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 定义
假设您没有需要保存的数据。
Project 单独列出 属性 table
Class Object.Test Extends %Persistent
{
Property values As list of %Integer(STORAGEDEFAULT="array", SQLPROJECTION = "table/column");
}
删除数据、存储定义并重新编译class。
生成数据。
执行SQL查询
SELECT
"values", count(*) AS "count"
FROM Object.Test_values
GROUP BY "values"
(可选)添加并构建 collection 索引。
注释。
这就是 SQL 方式。你也可以这样做:
- 对象方式(遍历对象及其属性)
- 全局方式(遍历全局和这个 属性 值)
我是 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 定义
假设您没有需要保存的数据。
Project 单独列出 属性 table
Class Object.Test Extends %Persistent { Property values As list of %Integer(STORAGEDEFAULT="array", SQLPROJECTION = "table/column"); }
删除数据、存储定义并重新编译class。
生成数据。
执行SQL查询
SELECT "values", count(*) AS "count" FROM Object.Test_values GROUP BY "values"
(可选)添加并构建 collection 索引。
注释。
这就是 SQL 方式。你也可以这样做:
- 对象方式(遍历对象及其属性)
- 全局方式(遍历全局和这个 属性 值)