Skip to main content

Advanced Queries

This guide covers advanced querying techniques in Fluree.

Aggregations

Count, sum, and calculate across your data:


{
"from": "my-ledger",
"where": {"@id": "?person", "@type": "Person"},
"select": "(count ?person)"
}

Common aggregation functions:

  • (count ?var) — Number of matches
  • (sum ?var) — Total of numeric values
  • (avg ?var) — Average of numeric values
  • (min ?var) / (max ?var) — Minimum/maximum values

Grouping Results

Group results by a property:


{
"from": "my-ledger",
"where": {"@id": "?person", "department": "?dept"},
"select": ["?dept", "(count ?person)"],
"groupBy": "?dept"
}

Returns count of people per department.

Having Clauses

Filter groups after aggregation:


{
"from": "my-ledger",
"where": {"@id": "?person", "department": "?dept"},
"select": ["?dept", "(count ?person)"],
"groupBy": "?dept",
"having": "(> (count ?person) 5)"
}

Returns only departments with more than 5 people.

Ordering Results

Sort your results:


{
"from": "my-ledger",
"where": {"@id": "?person", "name": "?name", "age": "?age"},
"select": {"?person": ["name", "age"]},
"orderBy": "?age"
}

Descending order:


"orderBy": ["(desc ?age)"]

Multiple sort keys:


"orderBy": ["?department", "(desc ?age)"]

Pagination

Use limit and offset:


{
"from": "my-ledger",
"where": {"@id": "?person", "@type": "Person"},
"select": {"?person": ["name"]},
"limit": 10,
"offset": 20
}

Complex Where Patterns

Match multiple conditions:


{
"from": "my-ledger",
"where": [
{"@id": "?person", "department": "Engineering"},
{"@id": "?person", "level": "Senior"}
],
"select": {"?person": ["name"]}
}

Optional Matches

Include results even when some properties are missing:


{
"from": "my-ledger",
"where": [
{"@id": "?person", "name": "?name"},
["optional", {"@id": "?person", "phone": "?phone"}]
],
"select": ["?name", "?phone"]
}

Union Queries

Match either of multiple patterns:


{
"from": "my-ledger",
"where": [
["union",
{"@id": "?entity", "@type": "Person"},
{"@id": "?entity", "@type": "Organization"}
]
],
"select": {"?entity": ["name"]}
}

Next Steps