
op:bucket-group( $name as xs:string, $column as item(), $boundaries as xs:anyAtomicType+, [$collation as xs:string?] ) as map:map
This function can be used as a named group in functions op:group-to-arrays or op:facet-by. After grouping, the plan can also join a literal table with descriptive metadata based for each bucket number. Developers can handle special cases by taking the same approach as the convenience function and binding a new column on the return value of an sql:bucket expression on a numeric or datetime column to use as a grouping key.
| Parameters | |
|---|---|
| $name | The name of both the group and the new grouping key column with numbered buckets. |
| $column | The identifier for the existing column with the values (typically numeric or datetime) to put into buckets. The columns can be named with a string or a column function such as op:col, op:view-col, or op:schema-col, or constructed from an expression with op:as. |
| $boundaries | An ordered XQuery sequence of values that specify the boundaries between buckets. The values must have the same type as the existing column. |
| $collation | The collation to use when comparing strings as described in 'Collation URI Syntax' in the Application Developer's Guide |
xquery version "1.0-ml";
import module namespace op="http://marklogic.com/optic"
at "/MarkLogic/optic.xqy";
op:from-literals((
map:entry("r",1)=>map:with("c1","a")=>map:with("c2",1)=>map:with("c3","m"),
map:entry("r",2)=>map:with("c1","b")=>map:with("c2",1) ,
map:entry("r",3)=>map:with("c1","a") =>map:with("c3","n"),
map:entry("r",4) =>map:with("c2",3)=>map:with("c3","o"),
map:entry("r",5)=>map:with("c1","b") ,
map:entry("r",6) =>map:with("c2",5) ,
map:entry("r",7) =>map:with("c3","p"),
map:entry("r",8)=>map:with("c1","b")=>map:with("c2",1)=>map:with("c3","q")
))
=> op:group-to-arrays(
op:bucket-group("c2Bucket", op:col("r"), (2,4)),
op:count("numRows")
)
=> op:result()
Stack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.