如何在BigQuery中实现COUNTIFS等效功能?按用户统计特定事件次数
特定事件触发次数统计解决方案
要统计每个用户满足特定条件的事件触发次数,核心问题是正确解析嵌套的event_params参数——你之前的无效语句,就是因为直接引用了type(它是event_params内的子参数,并非顶层列)。以下是具体实现方法:
核心逻辑
针对不同事件的条件,先从event_params中提取目标参数值,再结合event_name做判断,最后用COUNTIF或SUM(CASE...)完成统计(两种写法效果一致)。
示例1:统计qr_interactions
需满足event_name = 'qr_click'且event_params中view参数值为qr_screen:
SELECT user_id, COUNTIF( event_name = 'qr_click' AND EXISTS( SELECT 1 FROM UNNEST(event_params) WHERE key = 'view' AND value.string_value = 'qr_screen' ) ) AS qr_interactions FROM `你的表名` GROUP BY user_id
示例2:统计admin_navigation
需满足event_name = 'tap_navigation'且event_params中type参数值匹配指定列表:
SELECT user_id, SUM( CASE WHEN event_name = 'tap_navigation' AND EXISTS( SELECT 1 FROM UNNEST(event_params) WHERE key = 'type' AND REGEXP_CONTAINS(value.string_value, 'card|profile|settings|clubs') ) THEN 1 ELSE 0 END ) AS admin_navigation FROM `你的表名` GROUP BY user_id
多事件合并统计
如果要同时统计多个事件,把多个统计字段放在同一查询即可:
SELECT user_id, -- 统计qr交互次数 COUNTIF( event_name = 'qr_click' AND EXISTS( SELECT 1 FROM UNNEST(event_params) WHERE key = 'view' AND value.string_value = 'qr_screen' ) ) AS qr_interactions, -- 统计导航点击次数 SUM( CASE WHEN event_name = 'tap_navigation' AND EXISTS( SELECT 1 FROM UNNEST(event_params) WHERE key = 'type' AND REGEXP_CONTAINS(value.string_value, 'card|profile|settings|clubs') ) THEN 1 ELSE 0 END ) AS admin_navigation FROM `你的表名` GROUP BY user_id
注意事项
- 替换
你的表名为实际数据表名称; - 根据
event_params中参数的类型,选择value.string_value/value.int_value/value.float_value等对应字段; UNNEST(event_params)是展开数组类型参数列表的关键,用于访问嵌套的键值对。
内容的提问来源于stack exchange,提问作者A.Y
相关产品推荐
相关产品推荐

