我有类似结构的一系列文件:和集合函数
<DOCUMENT>
<AMOUNTS>
<ELEMENT>
<AMOUNT>10.00</AMOUNT>
<INFO>
<CODE1>132</CODE1>
<CODE2>022</CODE2>
</INFO>
</ELEMENT>
<ELEMENT>
<AMOUNT>10.00</AMOUNT>
<INFO>
<CODE1>132</CODE1>
<CODE2>121</CODE2>
</INFO>
</ELEMENT>
<ELEMENT>
<AMOUNT>15.00</AMOUNT>
<INFO>
<CODE1>156</CODE1>
<CODE2>121</CODE2>
</INFO>
</ELEMENT>
</AMOUNTS>
</DOCUMENT>
我希望做的金额元素的各种款项,所以我已经把路径范围索引DOCUMENT/AMOUNTS/ELEMENT/AMOUNT
希望使用sum-aggregate
函数。但是,当使用cts:sum-aggregate
函数时,如果文档中包含多个具有相同值的元素,则会发生问题。为了说明我所看到的问题,假设上面的XML存储在'/DOCS/DOC1.XML
'uri。然后运行以下xQuery以获取文档中所有文档中所有文档的总和。我做的和在两种不同的方式和获得两种不同的结果:
(
fn:sum(doc('/DOCS/DOC1.XML')/DOCUMENT/AMOUNTS/ELEMENT/AMOUNT),
cts:sum-aggregate(
cts:path-reference("DOCUMENT/AMOUNTS/ELEMENT/AMOUNT"),
("any"),
cts:document-query('/DOCS/DOC1.XML')
)
)
的fn:sum
函数给出35和cts:sum-aggregate
给25和聚集功能只包括值中的一个总和。
我觉得我做错了什么,但我无法弄清楚什么,有人可以为我揭示一些事情吗?
感谢
大卫
有趣。 “项目频率”通常用于指示按索引中的项目数与数字片段(文档)的排序顺序。您是否尝试明确定义类型为“decimal”? – wst
“片段频率”表示它计算特定值出现的片段数量,而不管它在该片段中发生了多少次。 “物品频率”本身就是真实的物品,所以是的,“物品频率”就是你想要的。是的,'fragment-frequency'是默认值:http://docs.marklogic.com/cts:aggregate – grtjn