BigQuery:如何计算表格中数字的频率

Posted

技术标签:

【中文标题】BigQuery:如何计算表格中数字的频率【英文标题】:BigQuery: how to calculate the frequency of numbers in a table 【发布时间】:2021-12-30 10:32:54 【问题描述】:

我需要计算一个数字在一个表格的 4 列中出现了多少次。

我用过 COUNT(CASE WHEN column_1 = 1 THEN 1 END) 它有效,但仅适用于 1 列和 1 个数字。

是否可以一次添加所有column_N?

如果我需要检查很多数字(从 1 到 90),我该怎么办?

谢谢

【问题讨论】:

【参考方案1】:

为了简化对所有列的操作,一次尝试创建一个数组。 请参阅下面的一些示例数据。

with sample_data as (
    select 1 as id, 1 as col_1, 2 as col_2, 3 as col_3, 4 as col_4 union all 
    select 2, 1, 1, 5, 6 union all 
    select 3, 1, 7, 8, 1
)

select id
    , target
    , count(target) frequency
from sample_data
, UNNEST([col_1 , col_2, col_3, col_4 ]) target
group by id, target

如果列中有不需要的数字,例如,如果您要查找 1-90,但该集合还包含 91+,您将应用 where 子句来过滤掉您不需要的元素。

作为此方法的替代方法,您可以尝试取消透视您要计数的列,但我认为这更简单。

【讨论】:

【参考方案2】:

考虑下面的方法 - 它处理 your_table 中的所有列,除了 id 列(假设你有这样的)。您可以根据需要添加要排除在除列表中的任意数量的列。

select id, 
  ( select count(*)
    from unnest(`bqutil.fn.json_extract_values`(to_json_string((
      select as struct * except(id) from unnest([t])
    )))) value
    where value = '1'
  ) as frequency
from your_table t        

注意:您希望,而不是排除列 - 您可以明确列出要参与搜索的列

【讨论】:

以上是关于BigQuery:如何计算表格中数字的频率的主要内容,如果未能解决你的问题,请参考以下文章

在 Google 表格中使用 BigQuery,如何授予其他用户按“刷新”的权限?

如何将 52.4 MB 的 XLSX 电子表格加载到 BigQuery 中?

如何在 R 中获取表格,包括计数、相对频率和累积频率?

在 Google Apps 脚本中使用 BigQuery 连接到 Google 电子表格

Bigquery 的 Google 表格数据连接器消失了

excel表格如何计算超过15位的数字