for the last year I replied 3 times with a silly snippet:
```
SELECT
    [2, 3, 4] AS x,
    pow(2, arraySum(i -> log2(i), x)) AS arrayProduct
┌─x───────┬─arrayProduct─┐
│ [2,3,4] │           24 │
└─────────┴──────────────┘
```

I think we need a function to multiply elements of an array.
static bool needExpression() { return false; }
    static bool needOneArray() { return false; }
    static DataTypePtr getReturnType(const DataTypePtr & expression_return, const DataTypePtr & )
    {
        DataTypePtr result;
        auto call = [&](const auto & types)
        {
            using Types = std::decay_t<decltype(types)>;
            using DataType = typename Types::LeftType;
            if constexpr (aggregate_operation == AggregateOperation::average)
            {
                result = std::make_shared<DataTypeFloat64>();
                return true;
            }
            else if constexpr (IsDataTypeNumber<DataType>)
            {
                using NumberReturnType = ArrayAggregateResult<typename DataType::FieldType, aggregate_operation>;
                result = std::make_shared<DataTypeNumber<NumberReturnType>>();
                return true;
            }
            else if constexpr (IsDataTypeDecimal<DataType> && !IsDataTypeDateOrDateTime<DataType>)
            {