Sql 在bigquery中按多个值选择

Sql 在bigquery中按多个值选择,sql,google-bigquery,Sql,Google Bigquery,我有这样的桌子结构。 现在我需要找到芯片超过90,硬币超过1000的关卡。如何提出此请求?这可能会帮助您: SELECT * FROM data WHERE ((SELECT COUNTIF((key = 'chips' AND value.int_value > 90)) FROM UNNEST(event_dim.params)) > 0 AND (SELECT countif((key = 'coins' AND value.int_value > 1000))

我有这样的桌子结构。

现在我需要找到芯片超过90,硬币超过1000的关卡。如何提出此请求?

这可能会帮助您:

SELECT 
  *
FROM data
WHERE ((SELECT COUNTIF((key = 'chips' AND value.int_value > 90)) FROM UNNEST(event_dim.params)) > 0 AND (SELECT countif((key = 'coins' AND value.int_value > 1000)) FROM UNNEST(event_dim.params)) > 0)
其中数据是您的输入行:

WITH data AS(
SELECT STRUCT<name string, params ARRAY<struct<key string, value STRUCT<string_value string, int_value int64> >>> ('level_up', [STRUCT('level' as key, STRUCT('null' as string_value, 19 as int_value) as value), STRUCT('firebase_event_origin' as key, struct('app' as string_value, null as int_value) as value), struct('chips' as key, STRUCT('null' as string_value, 97 as int_value) as value), STRUCT('coins' as key, struct('null' as string_value, 4085 as int_value) as value), STRUCT('powerups' as key, STRUCT('null' as string_value, 19 as int_value) as value)]) event_dim
)

请注意,这使用的是BigQuery的版本。

下面是BigQuery标准SQL的版本,提供的所有行都包含90多个芯片和1000多个硬币

标准SQL 挑选* 从你的桌子上 哪里 选择COUNTIFkey='chips'和value.int\u value>90 或键='coins'和value.int_value>1000 来自不相关的参数 > 1 注意:上面的查询假设每行中的键是唯一的——这很可能是一种情况

下面的变体为您提供了所有级别和相应行的计数,其中包含90多个筹码和1000多个硬币

标准SQL 选择param.value.int_value,COUNT1作为cnt 从您的表中,将unestEvent_dim.params作为param 哪里 选择COUNTIFkey='chips'和value.int\u value>90 或键='coins'和value.int_value>1000 来自不相关的参数 > 1 和param.key='level' 按1分组
这适用于Firebase BigQuery analytics的修改版本:

#standardSQL
SELECT *
FROM `myBigQueryProjectName.analytics_61118416.events_20180727`
WHERE 
event_name in ("notification_receive", "event_notification_received")
AND
(SELECT COUNTIF((key = "machine_name" AND value.string_value in("promo_name")) --begin of filtering request
              OR (key = "type" AND value.string_value in ("background"))
              ) 
              FROM UNNEST(event_params) 
) > 1  -- end of filtering request (Number must be less or equal of amount of if statements in countif!!!
AND platform = "ANDROID"

它正在工作,但我不明白为什么要在COUNTIF中使用OR运算符,如果需要两个条件都为真,而不是其中一个条件?