fal*_*lla 2 xml xquery flwor basex xquery-3.0
问题背景
鉴于每个家庭的类别......
<?xml version="1.0" encoding="UTF-8"?>
<root>
<family>
<categories>
<cat id="1" />
<cat id="2" />
</categories>
</family>
<family>
<categories>
<cat id="3" />
<cat id="5" />
</categories>
</family>
<family>
<categories>
<cat id="3" />
<cat id="5" />
<cat id="6" />
</categories>
</family>
</root>
Run Code Online (Sandbox Code Playgroud)
我想要家庭最常见的类别......
<common-family-category id="3" count="2"/>
<common-family-category id="5" count="2"/>
Run Code Online (Sandbox Code Playgroud)
成功的尝试
我可以通过对每个迭代的id进行分组来实现该结果...
for $family-category-id in //family/categories/cat/@id
count $return-indexes
group by $family-category-id
order by count($return-indexes) descending
where count($return-indexes) > 1
return
<common-family-category id="{$family-category-id}" count="{count($return-indexes)}" />
Run Code Online (Sandbox Code Playgroud)
并且通过迭代每个类别并将id存储在变量中......
for $family-category in //family/categories/cat
let $family-category-id := $family-category/@id
count $return-indexes
group by $family-category-id
order by count($return-indexes) descending
where count($return-indexes) > 1
return
<common-family-category id="{$family-category-id}" count="{count($return-indexes)}" />
Run Code Online (Sandbox Code Playgroud)
尝试失败
但我无法通过迭代类别并直接对id进行分组来实现这一点......
for $family-category in //family/categories/cat
count $return-indexes
group by $family-category/@id
order by count($return-indexes) descending
where count($return-indexes) > 1
return
<common-family-category id="{$family-category/@id}" count="{count($return-indexes)}" />
Run Code Online (Sandbox Code Playgroud)
它在以下错误中给出以下错误group by $family-category/@id:
[XPST0003]在"分组依据"之后期待有效表达
题
由于设置$family-category/@id进入$family-category-id和分组它的工作...
为什么$family-category/@id直接分组不起作用?
如果这真的不起作用,那是什么原因?
基本上,XQuery 3.0中有两种形式的分组子句
一般形式是
group by $var := key-expression
Run Code Online (Sandbox Code Playgroud)
其中$ var定义将引用该组的变量,key-expression是计算分组键的表达式.
如果你发现自己在写作
group by $var := $var
Run Code Online (Sandbox Code Playgroud)
那么你可以将其缩写为更方便的简写
group by $var
Run Code Online (Sandbox Code Playgroud)
但你不能写
group by key-expression
Run Code Online (Sandbox Code Playgroud)
不声明分组变量,除了键表达式是简单变量引用的特殊情况.
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |