Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
7e60152e
C
ClickHouse
项目概览
2dot5
/
ClickHouse
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
ClickHouse
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7e60152e
编写于
12月 23, 2017
作者:
A
Alexey Milovidov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added comments; added test [#CLICKHOUSE-2].
上级
69a77618
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
168 addition
and
0 deletion
+168
-0
dbms/src/AggregateFunctions/AggregateFunctionStatisticsSimple.h
...rc/AggregateFunctions/AggregateFunctionStatisticsSimple.h
+12
-0
dbms/tests/queries/0_stateless/00181_aggregate_functions_statistics_stable.reference
...ess/00181_aggregate_functions_statistics_stable.reference
+14
-0
dbms/tests/queries/0_stateless/00181_aggregate_functions_statistics_stable.sql
...stateless/00181_aggregate_functions_statistics_stable.sql
+142
-0
未找到文件。
dbms/src/AggregateFunctions/AggregateFunctionStatisticsSimple.h
浏览文件 @
7e60152e
...
...
@@ -10,6 +10,18 @@
#include <DataTypes/DataTypesNumber.h>
/** This is simple, not numerically stable
* implementations of variance/covariance/correlation functions.
*
* It is about two times faster than stable variants.
* Numerical errors may occur during summation.
*
* This implementation is selected as default,
* because "you don't pay for what you don't need" principle.
*
* For more sophisticated implementation, look at AggregateFunctionStatistics.h
*/
namespace
DB
{
...
...
dbms/tests/queries/0_stateless/00181_aggregate_functions_statistics_stable.reference
0 → 100644
浏览文件 @
7e60152e
inf
0
inf
0
0
0
0
0
inf
0
0
0
inf
0
dbms/tests/queries/0_stateless/00181_aggregate_functions_statistics_stable.sql
0 → 100644
浏览文件 @
7e60152e
DROP
TABLE
IF
EXISTS
test
.
series
;
CREATE
TABLE
test
.
series
(
i
UInt32
,
x_value
Float64
,
y_value
Float64
)
ENGINE
=
Memory
;
INSERT
INTO
test
.
series
(
i
,
x_value
,
y_value
)
VALUES
(
1
,
5
.
6
,
-
4
.
4
),(
2
,
-
9
.
6
,
3
),(
3
,
-
1
.
3
,
-
4
),(
4
,
5
.
3
,
9
.
7
),(
5
,
4
.
4
,
0
.
037
),(
6
,
-
8
.
6
,
-
7
.
8
),(
7
,
5
.
1
,
9
.
3
),(
8
,
7
.
9
,
-
3
.
6
),(
9
,
-
8
.
2
,
0
.
62
),(
10
,
-
3
,
7
.
3
);
/* varSampStable */
SELECT
varSampStable
(
x_value
)
FROM
(
SELECT
x_value
FROM
test
.
series
LIMIT
0
);
SELECT
varSampStable
(
x_value
)
FROM
(
SELECT
x_value
FROM
test
.
series
LIMIT
1
);
SELECT
round
(
abs
(
res1
-
res2
),
6
)
FROM
(
SELECT
varSampStable
(
x_value
)
AS
res1
,
(
sum
(
x_value
*
x_value
)
-
((
sum
(
x_value
)
*
sum
(
x_value
))
/
count
()))
/
(
count
()
-
1
)
AS
res2
FROM
test
.
series
);
/* stddevSampStable */
SELECT
stddevSampStable
(
x_value
)
FROM
(
SELECT
x_value
FROM
test
.
series
LIMIT
0
);
SELECT
stddevSampStable
(
x_value
)
FROM
(
SELECT
x_value
FROM
test
.
series
LIMIT
1
);
SELECT
round
(
abs
(
res1
-
res2
),
6
)
FROM
(
SELECT
stddevSampStable
(
x_value
)
AS
res1
,
sqrt
((
sum
(
x_value
*
x_value
)
-
((
sum
(
x_value
)
*
sum
(
x_value
))
/
count
()))
/
(
count
()
-
1
))
AS
res2
FROM
test
.
series
);
/* varPopStable */
SELECT
varPopStable
(
x_value
)
FROM
(
SELECT
x_value
FROM
test
.
series
LIMIT
0
);
SELECT
varPopStable
(
x_value
)
FROM
(
SELECT
x_value
FROM
test
.
series
LIMIT
1
);
SELECT
round
(
abs
(
res1
-
res2
),
6
)
FROM
(
SELECT
varPopStable
(
x_value
)
AS
res1
,
(
sum
(
x_value
*
x_value
)
-
((
sum
(
x_value
)
*
sum
(
x_value
))
/
count
()))
/
count
()
AS
res2
FROM
test
.
series
);
/* stddevPopStable */
SELECT
stddevPopStable
(
x_value
)
FROM
(
SELECT
x_value
FROM
test
.
series
LIMIT
0
);
SELECT
stddevPopStable
(
x_value
)
FROM
(
SELECT
x_value
FROM
test
.
series
LIMIT
1
);
SELECT
round
(
abs
(
res1
-
res2
),
6
)
FROM
(
SELECT
stddevPopStable
(
x_value
)
AS
res1
,
sqrt
((
sum
(
x_value
*
x_value
)
-
((
sum
(
x_value
)
*
sum
(
x_value
))
/
count
()))
/
count
())
AS
res2
FROM
test
.
series
);
/* covarSampStable */
SELECT
covarSampStable
(
x_value
,
y_value
)
FROM
(
SELECT
x_value
,
y_value
FROM
test
.
series
LIMIT
0
);
SELECT
covarSampStable
(
x_value
,
y_value
)
FROM
(
SELECT
x_value
,
y_value
FROM
test
.
series
LIMIT
1
);
SELECT
round
(
abs
(
COVAR1
-
COVAR2
),
6
)
FROM
(
SELECT
arrayJoin
([
1
])
AS
ID2
,
covarSampStable
(
x_value
,
y_value
)
AS
COVAR1
FROM
test
.
series
)
ANY
INNER
JOIN
(
SELECT
arrayJoin
([
1
])
AS
ID2
,
sum
(
VAL
)
/
(
count
()
-
1
)
AS
COVAR2
FROM
(
SELECT
(
X
-
AVG_X
)
*
(
Y
-
AVG_Y
)
AS
VAL
FROM
(
SELECT
toUInt32
(
arrayJoin
([
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
]))
AS
ID
,
avg
(
x_value
)
AS
AVG_X
,
avg
(
y_value
)
AS
AVG_Y
FROM
test
.
series
)
ANY
INNER
JOIN
(
SELECT
i
AS
ID
,
x_value
AS
X
,
y_value
AS
Y
FROM
test
.
series
)
USING
ID
)
)
USING
ID2
;
/* covarPopStable */
SELECT
covarPopStable
(
x_value
,
y_value
)
FROM
(
SELECT
x_value
,
y_value
FROM
test
.
series
LIMIT
0
);
SELECT
covarPopStable
(
x_value
,
y_value
)
FROM
(
SELECT
x_value
,
y_value
FROM
test
.
series
LIMIT
1
);
SELECT
round
(
abs
(
COVAR1
-
COVAR2
),
6
)
FROM
(
SELECT
arrayJoin
([
1
])
AS
ID2
,
covarPopStable
(
x_value
,
y_value
)
AS
COVAR1
FROM
test
.
series
)
ANY
INNER
JOIN
(
SELECT
arrayJoin
([
1
])
AS
ID2
,
sum
(
VAL
)
/
count
()
AS
COVAR2
FROM
(
SELECT
(
X
-
AVG_X
)
*
(
Y
-
AVG_Y
)
AS
VAL
FROM
(
SELECT
toUInt32
(
arrayJoin
([
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
]))
AS
ID
,
avg
(
x_value
)
AS
AVG_X
,
avg
(
y_value
)
AS
AVG_Y
FROM
test
.
series
)
ANY
INNER
JOIN
(
SELECT
i
AS
ID
,
x_value
AS
X
,
y_value
AS
Y
FROM
test
.
series
)
USING
ID
)
)
USING
ID2
;
/* corr */
SELECT
corrStable
(
x_value
,
y_value
)
FROM
(
SELECT
x_value
,
y_value
FROM
test
.
series
LIMIT
0
);
SELECT
corrStable
(
x_value
,
y_value
)
FROM
(
SELECT
x_value
,
y_value
FROM
test
.
series
LIMIT
1
);
SELECT
round
(
abs
(
corrStable
(
x_value
,
y_value
)
-
covarPopStable
(
x_value
,
y_value
)
/
(
stddevPopStable
(
x_value
)
*
stddevPopStable
(
y_value
))),
6
)
FROM
test
.
series
;
DROP
TABLE
test
.
series
;
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录