Sql 如何对数组和其他数据求和?

Sql 如何对数组和其他数据求和?,sql,clickhouse,Sql,Clickhouse,如何使用简单SQL获得相同的结果 我有两张这样的桌子 create table t1_before ( k1 String, ts DateTime, span Int32, iserror Int32 ) ENGINE = MergeTree() ORDER BY (k1, ts) ; 表t1是之前由t1_进行的聚合。目标。m是跨度,目标。n是计数。 交换到t1之前,t1_中的数据。 像这样: insert into t1 values('key1','2019-05-0

如何使用简单SQL获得相同的结果

我有两张这样的桌子

create table t1_before
(
  k1 String,
  ts DateTime,
  span  Int32,
  iserror  Int32
)
ENGINE = MergeTree()
ORDER BY (k1, ts)
;
表t1是之前由t1_进行的聚合。目标。m是跨度,目标。n是计数。 交换到t1之前,t1_中的数据。 像这样:

insert into t1 values('key1','2019-05-04 10:00:00', 13, 2, 7, 2, [1,2],[3,5]);
t1_之前有太多的行,所以实际上我只有表t1

如果数据是

insert into t1 values('key1','2019-05-04 10:00:00', 13, 2, 7, 2, [1,2],[3,5]);
insert into t1 values('key1','2019-05-04 10:00:20', 25, 4, 8, 3, [1,2,4],[1,2,5]);
insert into t1 values('key1','2019-05-04 11:02:30', 13, 2, 8, 1, [1,2],[3,5]);
insert into t1 values('key2','2019-05-04 10:00:00', 13, 2, 8, 3, [1,2],[3,5]);
insert into t1 values('key2','2019-05-04 10:02:00', 13, 2, 8, 0, [1,2],[3,5]);
我知道如何得到结果,但很复杂

SELECT 
    d1.k1, d1.ts2, d1.a1, 
    d2.sumtotalspan, d2.maxtotalspan, d2.sumtotalcount, d2.sumerrorcount
FROM 
(
    SELECT 
        k1, ts2, quantilesExactWeighted(0.5, 0.9, 0.99)(m1, n1) AS a1
    FROM 
    (
        SELECT 
            k1, 
            toStartOfHour(ts) AS ts2, 
            goal.m AS m1, 
            sum(goal.n) AS n1
        FROM t1 
        ARRAY JOIN goal
        GROUP BY  k1, toStartOfHour(ts), goal.m
    ) 
    GROUP BY k1, ts2
) AS d1 
INNER JOIN 
(
    SELECT 
        k1, 
        toStartOfHour(ts) AS ts2, 
        sum(totalspan) AS sumtotalspan, 
        max(totalspan) AS maxtotalspan, 
        sum(totalcount) AS sumtotalcount, 
        sum(errorcount) AS sumerrorcount
    FROM t1 
    GROUP BY k1, toStartOfHour(ts)
) AS d2 ON (d1.k1 = d2.k1) AND (d1.ts2 = d2.ts2)
┌─k1┬─ts2─┬─a1──┬─总跨度─┬─最大总跨度─┬─总和计数─┬sumerrorcount │ 关键1│ 2019-05-04 10:00:00 │ [2,4,4] │ 38│ 25│ 15│ 5.│

│ 键2│ 2019-05-04 10:00:00 │ [2,2,2] │ 26│ 13│ 16│ 3.│

│ 关键1│ 2019-05-04 11:00:00 │ [2,2,2] │ 13│ 13│ 8.│ 1.│ └──────┴─────────────────────┴─────────┴──────

一套三行

任何简单的SQLremove连接都会得到相同的结果吗? 就像这样,但这是一个错误:

SELECT 
            k1, 
            toStartOfHour(ts) AS ts2, 
sum(totalspan) AS sumtotalspan, 
        max(totalspan) AS maxtotalspan, 
        sum(totalcount) AS sumtotalcount, 
        sum(errorcount) AS sumerrorcount,
            quantilesExactWeighted(0.5, 0.9, 0.99)(sumMap(goal.m, goal.n))
        FROM t1 
        GROUP BY  k1, toStartOfHour(ts)

您可以使用goal.m/goal.n和:

选择arrayReduce'sumMap',[[1,2,3,3]],[[4,5,6,7]] 格式TSV [1,2,3],[4,5,13]
clickhouse功能强大,可组合使用。 在聚合函数组合器中,我看到了-Array。所以我发现这个函数似乎得到了相同的结果: QuantilesExactWeightedArray 0.5,0.9,0.99goal.m,goal.n

SELECT 
    d1.k1, d1.ts2, d1.a1, 
    d2.sumtotalspan, d2.maxtotalspan, d2.sumtotalcount, d2.sumerrorcount
FROM 
(
    SELECT 
        k1, ts2, quantilesExactWeighted(0.5, 0.9, 0.99)(m1, n1) AS a1
    FROM 
    (
        SELECT 
            k1, 
            toStartOfHour(ts) AS ts2, 
            goal.m AS m1, 
            sum(goal.n) AS n1
        FROM t1 
        ARRAY JOIN goal
        GROUP BY  k1, toStartOfHour(ts), goal.m
    ) 
    GROUP BY k1, ts2
) AS d1 
INNER JOIN 
(
    SELECT 
        k1, 
        toStartOfHour(ts) AS ts2, 
        sum(totalspan) AS sumtotalspan, 
        max(totalspan) AS maxtotalspan, 
        sum(totalcount) AS sumtotalcount, 
        sum(errorcount) AS sumerrorcount
    FROM t1 
    GROUP BY k1, toStartOfHour(ts)
) AS d2 ON (d1.k1 = d2.k1) AND (d1.ts2 = d2.ts2)
SELECT 
            k1, 
            toStartOfHour(ts) AS ts2, 
sum(totalspan) AS sumtotalspan, 
        max(totalspan) AS maxtotalspan, 
        sum(totalcount) AS sumtotalcount, 
        sum(errorcount) AS sumerrorcount,
            quantilesExactWeighted(0.5, 0.9, 0.99)(sumMap(goal.m, goal.n))
        FROM t1 
        GROUP BY  k1, toStartOfHour(ts)