**Describe the bug**
Performing `sumMap` function with decimal values does not sum properly. looks like an overflow.

**Does it reproduce on recent release?**
[The list of releases](https://github.com/ClickHouse/ClickHouse/blob/master/utils/list-versions/version_date.tsv)
Yes. tried on latest `21.1.2.15` as well as `20.12.4.5`

**How to reproduce**
```sql
CREATE TABLE sum_map(
    statusMap Nested(
        goal_id UInt16,
        revenue Decimal32(5)
    )
) ENGINE = Log;

INSERT INTO sum_map VALUES
    ([1, 2, 3], [10.5, 10.5, 10.5]),
    ([3, 4, 5], [10.5, 10.5, 10.5]),
    ([4, 5, 6], [10.5, 10.5, 10.5]),
    ([6, 7, 8], [10.5, 10.5, 10.5]);

SELECT
    sumMap(statusMap.goal_id, statusMap.revenue)
FROM sum_map;
```

**Expected behavior**
The decimal values in the nested revenue column should be summed properly. The select above leads to:
```
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| sumMap(statusMap.goal_id, statusMap.revenue)                                                                                                                                                                                                                                                                                    |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ([1,2,3,4,5,6,7,8],[1521106780904990803940045903404371.81840,-305731560536066622954267316264999.30736,25802410697087604800041730231.52928,25802360332470575101123994625.01152,25802360332494186933538342851.08000,25802360332517798765952691077.14848,25802360332694887509060302762.16208,25802360332742111173888999214.29904]) |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
```

**note** when writing this issue I accidentally [submitted pre-maturely](https://github.com/ClickHouse/ClickHouse/issues/19380) and closed that one.
auto & to_keys_arr = assert_cast<ColumnArray &>(to_tuple.getColumn(0));
        auto & to_keys_col = to_keys_arr.getData();
        
        auto & to_keys_offsets = to_keys_arr.getOffsets();
        to_keys_offsets.push_back(to_keys_offsets.back() + size);
        to_keys_col.reserve(size);
        for (size_t col = 0; col < num_columns; ++col)
        {
            auto & to_values_arr = assert_cast<ColumnArray &>(to_tuple.getColumn(col + 1));
            auto & to_values_offsets = to_values_arr.getOffsets();
            to_values_offsets.push_back(to_values_offsets.back() + size);
            to_values_arr.getData().reserve(size);
        }
        
        for (const auto & elem : merged_maps)
        {
            
            to_keys_col.insert(elem.first);
            
            for (size_t col = 0; col < num_columns; ++col)
            {
                auto & to_values_col = assert_cast<ColumnArray &>(to_tuple.getColumn(col + 1)).getData();
                if (elem.second[col].isNull())
                    to_values_col.insertDefault();
                else
                    to_values_col.insert(elem.second[col]);
            }
        }
    }
    bool keepKey(const T & key) const { return static_cast<const Derived &>(*this).keepKey(key); }