ClickHouse
44 строки · 1.0 Кб
1#include <AggregateFunctions/AggregateFunctionFactory.h>
2#include <AggregateFunctions/CrossTab.h>
3#include <AggregateFunctions/FactoryHelpers.h>
4#include <memory>
5#include <cmath>
6
7
8namespace DB
9{
10
11namespace
12{
13
14struct CramersVData : CrossTabData
15{
16static const char * getName()
17{
18return "cramersV";
19}
20
21Float64 getResult() const
22{
23if (count < 2)
24return std::numeric_limits<Float64>::quiet_NaN();
25
26UInt64 q = std::min(count_a.size(), count_b.size());
27return sqrt(getPhiSquared() / (q - 1));
28}
29};
30
31}
32
33void registerAggregateFunctionCramersV(AggregateFunctionFactory & factory)
34{
35factory.registerFunction(CramersVData::getName(),
36[](const std::string & name, const DataTypes & argument_types, const Array & parameters, const Settings *)
37{
38assertBinary(name, argument_types);
39assertNoParameters(name, parameters);
40return std::make_shared<AggregateFunctionCrossTab<CramersVData>>(argument_types);
41});
42}
43
44}
45