BigQuery计算两个记录值是否大于或等于其列中的值,并求出总百分比

问题描述 投票:0回答:1

假设我有一个模拟产生的数百万条记录的表格,下面的示例

    TO  Sim DUR Cost
    1   1   20  145
    1   2   24  120
    1   3   27  176
    1   4   30  170
    1   5   23  173
    1   6   26  148
    1   7   21  175
    1   8   22  171
    1   9   23  169
    1   10  23  178
    2   1   23  172
    2   2   29  152
    2   3   25  162
    2   4   20  179
    2   5   26  154
    2   6   27  137
    2   7   27  131
    2   8   28  148
    2   9   25  156
    2   10  22  169

如何在BigQuery中进行计算以找到满足两个条件的行的百分比计数。 (我可以做一个UDF,但我希望它全部在SQL语句中)

等于新计算列的excel == ififs($ C $ 2:$ C $ 21,“> =”&C2,$ D $ 2:$ D $ 21,“> =”&D2,$ A $ 2:$ A $ 21 ,A2)/ countif($ A $ 2:$ A $ 21,A2)

结果看起来像

TO  Sim DUR Cost    f0
1   1   20  145 0.90
1   2   24  120 0.40
1   3   27  176 0.10
1   4   30  170 0.10
1   5   23  173 0.30
1   6   26  148 0.30
1   7   21  175 0.30
1   8   22  171 0.40
1   9   23  169 0.50
1   10  23  178 0.10
2   1   23  172 0.10
2   2   29  152 0.10
2   3   25  162 0.10
2   4   20  179 0.10
2   5   26  154 0.10
2   6   27  137 0.30
2   7   27  131 0.40
2   8   28  148 0.20
2   9   25  156 0.20
2   10  22  169 0.20
google-bigquery countif
1个回答
1
投票
下面是BigQuery标准SQL的内容>>

#standardSQL SELECT ANY_VALUE(a).*, COUNTIF(b.dur >= a.dur AND b.cost >= a.cost) / COUNT(1) calc FROM `project.dataset.table` a JOIN `project.dataset.table` b USING (to_) GROUP BY FORMAT('%t', a) -- ORDER BY to_, sim

如果应用于您的问题的样本数据-结果为

Row to_ sim dur cost calc 1 1 1 20 145 0.9 2 1 2 24 120 0.4 3 1 3 27 176 0.1 4 1 4 30 170 0.1 5 1 5 23 173 0.3 6 1 6 26 148 0.3 7 1 7 21 175 0.3 8 1 8 22 171 0.4 9 1 9 23 169 0.5 10 1 10 23 178 0.1 11 2 1 23 172 0.1 12 2 2 29 152 0.1 13 2 3 25 162 0.1 14 2 4 20 179 0.1 15 2 5 26 154 0.1 16 2 6 27 137 0.3 17 2 7 27 131 0.4 18 2 8 28 148 0.2 19 2 9 25 156 0.2 20 2 10 22 169 0.2

注意:我使用的是字段名称to_,而不是to,它是关键字,不允许用作列名
© www.soinside.com 2019 - 2024. All rights reserved.