返回周期数:
let $bd := doc("document")
return count ( for $c in $bd//cycle
where $c[@id]
return $c
)
每个周期都有一个ID,这里不重要,但必须指定它 上面使用的计数和下面的计数使用有什么区别?
let $bd := doc("document")
let $c := $bd//cycle[@id]
return count($c)
我不知道这两个XQueries之间的区别是返回相同的结果,但是遵循相同的模式,接下来的两个查询应该有效,但第二个查询不会...这里它们是:
模块的总小时数超过100。
*Working query*
let $bd:=doc("document")
return sum (
for $m in $bd//module[@id]
where $m/hours>100
return $m/hours
)
*Not working query*
let $bd := doc("document")
for $c in $bd//module[@id]
where $c/hours>100
return sum($c/hours)
我想知道为什么遵循相同的"模式"第二个查询不起作用。
无效查询的输出是这一个:
160 160 256 224 192 160
这不是我需要的结果,我想要所有这些的总和。
答案 0 :(得分:2)
前两个表达式在功能上是等效的。不同之处在于使用FLWOR与XPath来选择序列。
在第二个示例中,您在序列的每个项目(sum()
)上调用$c/hours
,而不是序列本身:
let $bd := doc("document")
return sum(
for $c in $bd//module[@id]
where $c/hours>100
return $c/hours)
您也可以使用XPath:
let $bd := doc("document")
let $c := $bd//module[@id][hours>100]
return sum($c/hours)
或类似地将FLWOR的结果分配给变量并总结:
let $bd := doc("document")
let $c :=
for $m in $bd//module[@id]
where $m/hours>100
return $m/hours
return sum($c)