将 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
如何将日期转换为 CDT 并使用 BigQuery 制作连接字符串?