You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
3.6 KiB
ReStructuredText
132 lines
3.6 KiB
ReStructuredText
2 years ago
|
==============
|
||
|
Aggregations
|
||
|
==============
|
||
|
|
||
|
|
||
|
Aggregations in Cozo can be thought of as a function that acts on a string of values and produces a single value (the aggregate). Due to Datalog semantics, the stream is never empty.
|
||
|
|
||
|
There are two kinds of aggregations in Cozo, *ordinary aggregations* and *meet aggregations*. They are implemented differently in Cozo, with meet aggregations generally faster and more powerful (e.g. only meet aggregations can be recursive).
|
||
|
|
||
|
The power of meet aggregations derive from the additional properties they satisfy (see also https://en.wikipedia.org/wiki/Semilattice):
|
||
|
|
||
|
idempotency
|
||
|
the aggregate of a single value ``a`` is ``a`` itself,
|
||
|
commutivity
|
||
|
the aggregate of ``a`` then ``b`` is equal to the aggregate of ``b`` then ``a``,
|
||
|
commutivity
|
||
|
it is immaterial where we put the parentheses in an aggregate application.
|
||
|
|
||
|
Meet aggregations can be used as ordinary ones, but the reverse is impossible.
|
||
|
|
||
|
------------------
|
||
|
Meet aggregations
|
||
|
------------------
|
||
|
|
||
|
.. module:: Aggr.Meet
|
||
|
|
||
|
.. function:: min(x)
|
||
|
|
||
|
Aggregate the minimum value of all ``x``.
|
||
|
|
||
|
.. function:: max(x)
|
||
|
|
||
|
Aggregate the maximum value of all ``x``.
|
||
|
|
||
|
.. function:: and(var)
|
||
|
|
||
|
Aggregate the logical conjunction of the variable passed in.
|
||
|
|
||
|
.. function:: or(var)
|
||
|
|
||
|
Aggregate the logical disjunction of the variable passed in.
|
||
|
|
||
|
.. function:: union(var)
|
||
|
|
||
|
Aggregate the unions of ``var``, which must be a list.
|
||
|
|
||
|
.. function:: intersection(var)
|
||
|
|
||
|
Aggregate the intersections of ``var``, which must be a list.
|
||
|
|
||
|
.. function:: choice(var)
|
||
|
|
||
|
Non-deterministically chooses one of the values of ``var`` as the aggregate. It simply chooses the first value it meets (the order that it meets values should be considered non-deterministic).
|
||
|
|
||
|
.. function:: choice_last(var)
|
||
|
|
||
|
Non-deterministically chooses one of the values of ``var`` as the aggregate. It simply chooses the last value it meets.
|
||
|
|
||
|
.. function:: min_cost([data, cost])
|
||
|
|
||
|
The argument should be a list of two elements and this aggregation chooses the list of the minimum ``cost``.
|
||
|
|
||
|
.. function:: shortest(var)
|
||
|
|
||
|
``var`` must be a list. Returns the shortest list among all values. Ties will be broken non-deterministically.
|
||
|
|
||
|
.. function:: coalesce(var)
|
||
|
|
||
|
Returns the first non-null value it meets. The order is non-deterministic.
|
||
|
|
||
|
.. function:: bit_and(var)
|
||
|
|
||
|
``var`` must be bytes. Returns the bitwise 'and' of the values.
|
||
|
|
||
|
.. function:: bit_or(var)
|
||
|
|
||
|
``var`` must be bytes. Returns the bitwise 'or' of the values.
|
||
|
|
||
|
---------------------
|
||
|
Ordinary aggregations
|
||
|
---------------------
|
||
|
|
||
|
.. module:: Aggr.Ord
|
||
|
|
||
|
.. function:: count(var)
|
||
|
|
||
|
Count how many values are generated for ``var`` (using bag instead of set semantics).
|
||
|
|
||
|
.. function:: count_unique(var)
|
||
|
|
||
|
Count how many unique values there are for ``var``.
|
||
|
|
||
|
.. function:: collect(var)
|
||
|
|
||
|
Collect all values for ``var`` into a list.
|
||
|
|
||
|
.. function:: unique(var)
|
||
|
|
||
|
Collect ``var`` into a list, keeping each unique value only once.
|
||
|
|
||
|
.. function:: group_count(var)
|
||
|
|
||
|
Count the occurrence of unique values of ``var``, putting the result into a list of lists, e.g. when applied to ``'a'``, ``'b'``, ``'c'``, ``'c'``, ``'a'``, ``'c'``, the results is ``[['a', 2], ['b', 1], ['c', 3]]``.
|
||
|
|
||
|
.. function:: bit_xor(var)
|
||
|
|
||
|
``var`` must be bytes. Returns the bitwise 'xor' of the values.
|
||
|
|
||
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
Statistical aggregations
|
||
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
|
||
|
.. function:: mean(x)
|
||
|
|
||
|
The mean value of ``x``.
|
||
|
|
||
|
.. function:: sum(x)
|
||
|
|
||
|
The sum of ``x``.
|
||
|
|
||
|
.. function:: product(x)
|
||
|
|
||
|
The product of ``x``.
|
||
|
|
||
|
.. function:: variance(x)
|
||
|
|
||
|
The sample variance of ``x``.
|
||
|
|
||
|
.. function:: std_dev(x)
|
||
|
|
||
|
The sample standard deviation of ``x``.
|