```
SELECT categoricalInformationValue(x.1, x.2) FROM (SELECT arrayJoin([(0, 0), (NULL, 2), (1, 0), (1, 1)]) AS x)
```
const std::string & name,
    const DataTypes & arguments,
    const Array & params,
    const Settings *)
{
    assertNoParameters(name, params);
    if (arguments.size() < 2)
        throw Exception(
            "Aggregate function " + name + " requires two or more arguments",
            ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH);
    for (const auto & argument : arguments)
    {
        if (!WhichDataType(argument).isUInt8())
            throw Exception(
                "All the arguments of aggregate function " + name + " should be UInt8",
                ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT);
    }
    return std::make_shared<AggregateFunctionCategoricalIV<>>(arguments, params);
}
}
void registerAggregateFunctionCategoricalIV(
    AggregateFunctionFactory & factory
)
{
    factory.registerFunction("categoricalInformationValue", createAggregateFunctionCategoricalIV);
}
}