将 COUNT(字符串)除以 BigQuery 中的条件

Posted

技术标签:

【中文标题】将 COUNT(字符串)除以 BigQuery 中的条件【英文标题】:Dividing COUNT (strings) with conditions in BigQuery 【发布时间】:2021-02-16 10:26:59 【问题描述】:

我对 SQL 和 Google BigQuery 还很陌生,如果这是一个非常愚蠢的问题,请原谅我。 我有一个表,其中一个字符串列称为“状态”,并且有不同类型的条目 - 打开、单击、发送等。我想将状态被“单击”的出现次数除以出现次数状态为“打开”的位置。我正在尝试这样的事情:

选择 计数(属性。状态) 从 campaign 在哪里 properties.status = "点击" / 选择 计数(属性。状态) 从 campaign 在哪里 properties.status = "打开"

【问题讨论】:

从 ... 中选择 count(this) / count(that) 【参考方案1】:

使用case表达式来做条件聚合

SELECT SUM(case when properties.status = "clicked" then 1 else 0 end) /
       SUM(case when properties.status = "opened" then 1 else 0 end)
FROM campaign

【讨论】:

【参考方案2】:

在 BigQuery 中,您可以使用COUNTIF()

SELECT COUNTIF(properties.status = 'clicked') / COUNTIF(properties.status = 'opened')
FROM campaign c;

如果您想处理除以零(因此它返回NULL 而不是错误),请使用NULLIF()SAFE_DIVIDE()

SELECT COUNTIF(properties.status = 'clicked') / NULLIF(COUNTIF(properties.status = 'opened'), 0)
FROM campaign c;

或者:

SELECT SAFE_DIVIDE(COUNTIF(properties.status = 'clicked'),
                   COUNTIF(properties.status = 'opened')
                  )
FROM campaign c;

【讨论】:

以上是关于将 COUNT(字符串)除以 BigQuery 中的条件的主要内容,如果未能解决你的问题,请参考以下文章

用于将 HLL_COUNT.INIT 提取到 BigQuery 的 Google DataFlow API

BigQuery 上出现意外的“除以零:0 / 0”错误

如何将日期转换为 CDT 并使用 BigQuery 制作连接字符串?

BigQuery 避免多个子查询

BIGQUERY 中的 COUNT() 和 GROUP BY

如何将平面/关系表转换为 BigQuery 中的键/值对表?