我通过使用多个字段使用以下两个查询组
CTS Query :
xquery version "1.0-ml";
let $filterData := (for $doc in cts:search(doc(), cts:and-query((cts:collection-query("studentData"),
cts:collection-query("Student"))), ("unfiltered"))
return <result>{$doc/tXML/Student/Class, $doc/tXML/Student/Status,
$doc/tXML/Student/TotalRemarks}</result> )
return element result { for $cls in fn:distinct-values($filterData/Class)
return (
let $data1 := $filterData[Class eq $cls]
for $status in fn:distinct-values($data1/Status)
return ( element object { element groubBy{attribute attr {'Class'}, $cls},
element groubBy{attribute attr {'Status'}, $status},
element aggregation {attribute attr {'Remarks'}, fn:sum($data1[Status eq $status]/TotalRemarks)}}) ) }
Optic Query :
xquery version "1.0-ml";
import module namespace op="http://marklogic.com/optic" at "/MarkLogic/optic.xqy";
op:from-view("STUDT", "StudentDataView")
=> op:group-by(("Class ","Status"), (
op:sum("TotalRemarks", "TotalRemarks"),
))
=>op:select(("Class","Status","TotalRemarks"))
=>op:result()
与类似数据集的 CTS 查询相比,在此 Optic 查询中花费的时间更少。如果基于 TDE 的光学查询,那么它如何花费更多时间。