```
SELECT categoricalInformationValue(x.1, x.2) FROM (SELECT arrayJoin([(0, 0), (NULL, 2), (1, 0), (1, 1)]) AS x)
```
{
        return "categoricalInformationValue";
    }
    bool allocatesMemoryInArena() const override { return false; }
    void create(AggregateDataPtr __restrict place) const override
    {
        memset(place, 0, sizeOfData());
    }
    void destroy(AggregateDataPtr __restrict) const noexcept override
    {
        
    }
    bool hasTrivialDestructor() const override
    {
        return true;
    }
    size_t sizeOfData() const override
    {
        return sizeof(T) * (category_count + 1) * 2;
    }
    size_t alignOfData() const override
    {
        return alignof(T);
    }
    void add(AggregateDataPtr __restrict place, const IColumn ** columns, size_t row_num, Arena *) const override