按列“not”划分的sql和

7tofc5zh  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(336)

我需要构建分析sql查询,客户机应该在其中指定任何度量(特定列中的值求和)或维度(按特定列分组)。
假设我有一个包含列的表 hour , dim_a , dim_b , metric_a , metric_b , metric_c 值显示在下面的csv中

hour,dim_a,dim_b,metric_a,metric_b
0,A,X,4,4
0,A,Y,4,24
0,B,Y,20,24
1,B,Y,21,35
1,A,Y,4,35
1,C,Y,10,35
2,B,Y,21,30
2,C,Y,3,30
2,A,Y,6,30

看一看 metric_b . 如果值相同,则此度量总是相同的 hour 以及 dim_b 是一样的,不管 dim_a . 例如:

1,B,Y,21,35
1,A,Y,4,35
1,C,Y,10,35

如果我们选择列 hour , dim_b , metric_b 取不同的值表如下所示:

hour,dim_b,metric_b
0,X,4
0,Y,24
1,Y,35
2,Y,30

通过这个值,所有的聚合 metric_b 应该这样做
我想通过特定维度对这个数据分组运行分析查询,并在涉及到 metric_b .
当我想分组时 hour , dim_a , dim_b ,并查看度量 metric_a 以及 metric_b . 预期结果是

hour,dim_a,dim_b,metric_a,metric_b
0,A,X,4,4
0,A,Y,4,24
0,B,Y,20,24
1,B,Y,21,35
1,A,Y,4,35
1,C,Y,10,35
2,B,Y,21,30
2,C,Y,3,30
2,A,Y,6,30

当我想分组时 dim_a , dim_b ,并查看度量 metric_a 以及 metric_b . 预期结果是

dim_a,dim_b,metric_a,metric_b
A,X,4,4
A,Y,14,89
B,Y,62,89
C,Y,13,89

的价值 metric_b 按89=24+35+30计算;4 = 4
当我想分组时 dim_b ,参见公制。 metric_a 以及 metric_b . 预期结果是:

dim_b,metric_a,metric_b
X,4,4
Y,89,89

的价值 metric_b 按89=24+35+30计算;4 = 4
最后当我想分组时 dim_a ,参见公制。 metric_a 以及 metric_b . 预期结果是:

dim_a,metric_a,metric_b
A,18,93
B,62,93
C,13,93

的价值 metric_b 按93=24+35+30+4计算
所以 metric_b 应该是 metric_b 但不接受账目 dim_a 作为一个分组列,但采取其他一切。有没有sql语法可以帮助我这么做?
此外,我想说的是,这些查询将在awsredshift上运行,共有20个度量和16维36列。那里将有多达1000亿行。

tgabmvqs

tgabmvqs1#

对于2号:

SELECT *
FROM (
    SELECT dim_a
        ,dim_b
        ,sum(metric_a) a
    FROM dbo.Table_2 t
    GROUP BY dim_a
        ,dim_b
    ) a
CROSS APPLY (
    SELECT sum(metric_b) b
    FROM (
        SELECT DISTINCT metric_b
            ,hour
            ,dim_b
        FROM dbo.Table_2
        ) t2
    WHERE t2.dim_b = a.dim_b
    ) c

对于3号:

SELECT *
FROM (
    SELECT dim_b
        ,sum(metric_a) a
    FROM dbo.Table_2 t
    GROUP BY dim_b
    ) a
CROSS APPLY (
    SELECT sum(metric_b) b
    FROM (
        SELECT DISTINCT metric_b
            ,hour
            ,dim_b
        FROM dbo.Table_2
        ) t2
    WHERE t2.dim_b = a.dim_b
    ) c

对于4号:

SELECT *
FROM (
    SELECT dim_a
        ,sum(metric_a) a
    FROM dbo.Table_2 t
    GROUP BY dim_a
    ) a
CROSS APPLY (
    SELECT sum(metric_b) b
    FROM (
        SELECT DISTINCT metric_b
            ,hour
            ,dim_b
        FROM dbo.Table_2
        ) t2
    ) c

相关问题