```
SELECT roundBankers(mannWhitneyUTest('greater')(left, right).1, 16) as t_stat, roundBankers(mannWhitneyUTest('greater')(left, right).2, 16) as p_value FROM mann_whitney FORMAT TabSeparatedWithNames;
```

https://clickhouse-test-reports.s3.yandex.net/18488/1ddea6d7eed5cadce087cf19e51413440571a472/stress_test_(undefined)/stderr.log
static const Data & data(ConstAggregateDataPtr place) { return *reinterpret_cast<const Data *>(place); }
    DataTypePtr & data_type;
    UInt64 max_elems;
public:
    GroupArrayGeneralListImpl(const DataTypePtr & data_type_, UInt64 max_elems_ = std::numeric_limits<UInt64>::max())
        : IAggregateFunctionDataHelper<GroupArrayGeneralListData<Node>, GroupArrayGeneralListImpl<Node, Trait>>({data_type_}, {})
        , data_type(this->argument_types[0])
        , max_elems(max_elems_)
    {
    }
    String getName() const override { return getNameByTrait<Trait>(); }
    DataTypePtr getReturnType() const override { return std::make_shared<DataTypeArray>(data_type); }
    void add(AggregateDataPtr place, const IColumn ** columns, size_t row_num, Arena * arena) const override
    {
        if (limit_num_elems && data(place).elems >= max_elems)
            return;
        Node * node = Node::allocate(*columns[0], row_num, arena);
        if (unlikely(!data(place).first))
        {
            data(place).first = node;
            data(place).last = node;
        }
        else
        {
            data(place).last->next = node;
            data(place).last = node;
        }
        ++data(place).elems;
    }
    void merge(AggregateDataPtr place, ConstAggregateDataPtr rhs, Arena * arena) const override