description |
---|
A how to guide to show you how to group query results using WOQL in TerminusDB and TerminusCMS |
{% hint style="info" %} To use this How-To, first clone the Star Wars demo into your team on TerminusCMS. You will then have full access to the data needed for this tutorial {% endhint %}
If we need to group variables according to some criteria, we can create an aggregate of solutions using group_by
.
A group by is composed of a focus, a template, and a group together with a query.
We will demonstrate this with the following query:
let v = Vars("person", "label", "eyes", "group");
limit(1)
.group_by(
"eyes",
["label"],
v.group,
and(triple(v.person, "rdf:type", "@schema:People"),
triple(v.person, "label", v.label),
triple(v.person, "eye_color", v.eyes)))
The first argument, here "eyes"
refers to the eyes variable, and is the variable around which to form the group, the focus.
The second ["label"]
is the template, which refers to the variable "label"
. The template will be those things grouped under the first variable.
The third variable v.group
, is the group variable, which will include groups of templates for each set of solutions which shares a focus.
This raw query output will be:
{
"eyes": {
"@type": "xsd:string",
"@value": "black"
},
"group": [
[{
"@type": "xsd:string",
"@value": "Greedo"
}],
[{
"@type": "xsd:string",
"@value": "Nien Nunb"
}],
[{
"@type": "xsd:string",
"@value": "Gasgano"
}],
[{
"@type": "xsd:string",
"@value": "Kit Fisto"
}],
[{
"@type": "xsd:string",
"@value": "Plo Koon"
}],
[{
"@type": "xsd:string",
"@value": "Lama Su"
}],
[{
"@type": "xsd:string",
"@value": "Taun We"
}],
[{
"@type": "xsd:string",
"@value": "Shaak Ti"
}],
[{
"@type": "xsd:string",
"@value": "Tion Medon"
}],
[{
"@type": "xsd:string",
"@value": "BB8"
}]
],
"label": null,
"person": null
}