Group
Relation-valued attribute
Signature
group(operand: Relation, attributes: AttrList, as: AttrName) -> Relation
Examples
group(suppliers, [:sid, :name, :status], :suppliers)
group(suppliers, [:city], :suppliers, allbut: true)
Description
Summarizes operand
by all but the specified attributes
and groups the
latter under a relation-value attribute as
.
This operator could be formally defined as the following shortcut:
def group(operand, attributes, as)
extend(
allbut(operand, attributes),
as: ->(t){ project(matching(operand, Relation(t)), attributes) })
end
group(suppliers, [:sid, :name, :status], :suppliers)
This operators supports an ALL BUT variant, through the allbut
option.
When set to true, the operator keeps specified attributes and groups all
remaining ones as a relation-valued attribute.
Implementation notes
This operator does not compile to SQL so far. Contributions are welcome to provide it with a SQL compilation for SQL DBMSs that support this kind of feature (e.g. PostgreSQL with JSON data type)