This commit is contained in:
Andrei Bodrov 2019-11-23 10:55:41 +03:00
parent b676a292d4
commit d9c35c3242
2 changed files with 24 additions and 30 deletions

View File

@ -1,18 +1,17 @@
#pragma once
#include <IO/WriteHelpers.h>
#include <IO/ReadHelpers.h>
#include <IO/WriteHelpers.h>
#include <DataTypes/DataTypesNumber.h>
#include <DataTypes/DataTypesDecimal.h>
#include <Columns/ColumnsNumber.h>
#include <DataTypes/DataTypesDecimal.h>
#include <DataTypes/DataTypesNumber.h>
#include <AggregateFunctions/IAggregateFunction.h>
namespace DB
{
namespace ErrorCodes
{
extern const int LOGICAL_ERROR;
@ -37,7 +36,6 @@ struct AggregateFunctionAvgData
}
};
/// Calculates arithmetic mean of numbers.
template <typename Data, typename T, typename F>
class AggregateFunctionAvgBase : public IAggregateFunctionDataHelper<Data, F>
@ -49,16 +47,13 @@ public:
using ColVecResult = std::conditional_t<IsDecimalNumber<T>, ColumnDecimal<T>, ColumnVector<Float64>>;
/// ctor for native types
AggregateFunctionAvgBase(const DataTypes & argument_types_)
: IAggregateFunctionDataHelper<Data, F>(argument_types_, {})
, scale(0)
{}
AggregateFunctionAvgBase(const DataTypes & argument_types_) : IAggregateFunctionDataHelper<Data, F>(argument_types_, {}), scale(0) {}
/// ctor for Decimals
AggregateFunctionAvgBase(const IDataType & data_type, const DataTypes & argument_types_)
: IAggregateFunctionDataHelper<Data, F>(argument_types_, {})
, scale(getDecimalScale(data_type))
{}
: IAggregateFunctionDataHelper<Data, F>(argument_types_, {}), scale(getDecimalScale(data_type))
{
}
DataTypePtr getReturnType() const override
{
@ -98,18 +93,19 @@ protected:
UInt32 scale;
};
template <typename T, typename Data>
class AggregateFunctionAvg final : public AggregateFunctionAvgBase<Data, T, AggregateFunctionAvg<T, Data>>
{
public:
AggregateFunctionAvg(const DataTypes & argument_types_)
: AggregateFunctionAvgBase<Data, T, AggregateFunctionAvg<T, Data>>(argument_types_) {}
: AggregateFunctionAvgBase<Data, T, AggregateFunctionAvg<T, Data>>(argument_types_)
{
}
AggregateFunctionAvg(const IDataType & data_type, const DataTypes & argument_types_)
: AggregateFunctionAvgBase<Data, T, AggregateFunctionAvg<T, Data>>(data_type, argument_types_)
{}
{
}
using ColVecType = std::conditional_t<IsDecimalNumber<T>, ColumnDecimal<T>, ColumnVector<T>>;
void add(AggregateDataPtr place, const IColumn ** columns, size_t row_num, Arena *) const override
@ -120,7 +116,6 @@ public:
}
String getName() const override { return "avg"; }
};
}

View File

@ -4,8 +4,6 @@
namespace DB
{
template <typename T>
struct AggregateFunctionAvgWeightedData
{
@ -29,13 +27,15 @@ template <typename T, typename Data>
class AggregateFunctionAvgWeighted final : public AggregateFunctionAvgBase<Data, T, AggregateFunctionAvgWeighted<T, Data>>
{
public:
AggregateFunctionAvgWeighted(const DataTypes & argument_types_)
: AggregateFunctionAvgBase<Data, T, AggregateFunctionAvgWeighted<T, Data>>(argument_types_) {}
: AggregateFunctionAvgBase<Data, T, AggregateFunctionAvgWeighted<T, Data>>(argument_types_)
{
}
AggregateFunctionAvgWeighted(const IDataType & data_type, const DataTypes & argument_types_)
: AggregateFunctionAvgBase<Data, T, AggregateFunctionAvgWeighted<T, Data>>(data_type, argument_types_)
{}
{
}
using ColVecType = std::conditional_t<IsDecimalNumber<T>, ColumnDecimal<T>, ColumnVector<T>>;
void add(AggregateDataPtr place, const IColumn ** columns, size_t row_num, Arena *) const override
@ -48,7 +48,6 @@ public:
}
String getName() const override { return "avgWeighted"; }
};
}