UltipaDocs
Try Playground
  • Introduction
  • Terminologies
    • Reserved Words
    • Data Types
    • Alias
    • Operators
    • Expression
    • Filter
    • Prefix
    • Node and Edge Templates
    • Homologous and Heterologous Data
    • Clause Execution Times
    • Graphset
    • Schema
    • Property
    • Insert
    • Overwrite
    • Upsert
    • Update
    • Delete
    • Find Nodes
    • Find Edges
      • AB
      • Autonet
      • Spread
      • Path Template
      • K-Hop
      • K-Hop Template
    • Find Subgraphs
    • GROUP BY
    • ORDER BY
    • SKIP
    • LIMIT
    • WHERE
    • RETURN
    • WITH
    • UNCOLLECT
    • UNION
    • UNION ALL
    • CALL
    • BATCH
      • Schema Checker
      • Equal
      • Not Equal
      • Less Than
      • Greater Than
      • Less Than or Equal
      • Greater Than or Equal
      • Between
      • Between or Equal
      • Beong to
      • Not Belong To
      • CONTAINS | String
      • CONTAINS | Full-Text
      • Regular Match
      • IS NULL
      • IS NOT NULL
      • And
      • Or
      • Not
      • Exclusive OR
      • DISTINCT
      • toString()
      • toInteger()
      • toFloat()
      • toDouble()
      • toDecimal()
      • toSet()
      • castToRaw()
      • now()
      • dateAdd()
      • dateDiff()
      • year()
      • month()
      • day()
      • dayOfWeek()
      • dateFormat()
      • point()
      • distance()
      • pointInPolygon()
      • lower()
      • upper()
      • reverse()
      • startsWith()
      • endsWith()
      • JSON_decode()
      • JSON_merge()
      • trim()
      • ltrim()
      • rtrim()
      • left()
      • right()
      • substring()
      • replace()
      • split()
      • intersection()
      • difference()
      • listUnion()
      • size()
      • head()
      • reduce()
      • listContains()
      • append()
      • pi()
      • pow()
      • sqrt()
      • abs()
      • floor()
      • ceil()
      • round()
      • sin()
      • cos()
      • tan()
      • cot()
      • asin()
      • acos()
      • atan()
      • length()
      • pnodes()
      • pedges()
      • count()
      • sum()
      • max()
      • min()
      • avg()
      • stddev()
      • collect()
      • dedup()
      • CASE
      • table()
      • coalesce()
      • ifnull()
    • Acceleration
    • Index
    • Full-text
    • LTE
    • Real-time Process
    • Backend Task
    • Analytics Node
    • Server Statistics
    • Server Backup
    • Privilege
    • Policy
    • User
  • Trigger
  1. Docs
  2. /
  3. UQL
  4. /
  5. List Functions

reduce()

Function reduce() iterates a designated calculation against each elements in a list one after another. Developers need to define the calculation via an expression, firstly execute the calculation based on an initial value and the 1st element in the list, then re-execute the calculation based on the calculation result and the 2nd element in the list, ... until all elements in the list are traversed.

NOTE

The iteration pattern of this function is similar to the 'for' in most programming languages, just that the index of each iteration is not exposed to developers.

Syntax:

Syntax
reduce(<result> = <initial_value>, <element> in <list> | <expression>) 
  • <result> denotes the variable name of the calculation result
  • <initial_value> denotes the initial value
  • <element> denotes the variable name of element in the list
  • <list> denotes the alias of the list
  • <expression> denotes the calculation

Common Usage

Example: Calculate the sum of all numbers in [1,2,3]

UQL
with [1,2,3] as list
return reduce(sum = 0, element in list | sum + element) as mySum
Result
6

Sample graph: (to be used for the following examples)

Run below UQLs one by one in an empty graphset to create graph data: ```customlang___fold__lang_uql create().node_schema("firm").node_schema("human").edge_schema("hold") create().edge_property(@hold, "portion", double) insert().into(@firm).nodes([{_id:"F001", _uuid:1}, {_id:"F002", _uuid:2}]) insert().into(@human).nodes([{_id:"H001", _uuid:3}, {_id:"H002", _uuid:4}]) insert().into(@hold).edges([{_uuid:1, _from_uuid:3, _to_uuid:1, portion:0.3}, {_uuid:2, _from_uuid:2, _to_uuid:1, portion:0.7}, {_uuid:3, _from_uuid:3, _to_uuid:2, portion:0.4}, {_uuid:4, _from_uuid:4, _to_uuid:2, portion:0.6}]) ```

Example: Calculate the share of each UBO of F001

UQL
n({_id == "F001"}).le()[:5].n({@human} as UBO) as p
with pedges(p) as edgeList
call{
  with edgeList
  uncollect edgeList as edges
  with collect(edges.portion) as portionList
  return reduce(init = 1, element in portionList | init * element) as share
}
group by UBO
return table(UBO._id, sum(share))
Result
| UBO._id | sum(share) |
|---------|------------|
| H001    | 0.58       |
| H002    | 0.42       |