如何编写查询以引用两个键和两个值?

时间:2019-05-06 20:12:46

标签: sql google-bigquery

我正在尝试在Google BigQuery中编写一个查询,该查询提取两个键和两个值。该查询应为:从一张表中计数不同的伪用户ID,其中event_params.key =结果,event_params.key =确认号(且不为null),event_params.value.string_value =成功。这已经没有嵌套。我是SQL的新手,所以请忽略所有答案。

SELECT
*
FROM
  `table_name`,
  UNNEST(event_params) AS params
WHERE
  (stream_id = '1168190076'
    OR stream_id = '1168201031')
  AND params.key = 'result'
  AND params.value.string_value IN ('success',
    'SUCCESS')
    AND params.key = 'confirmationNumber' NOT NULL

我不断收到错误消息,当我没有收到错误消息时,我的电话号码差很多!我不确定下一步要去哪里。

2 个答案:

答案 0 :(得分:1)

以下是用于BigQuery标准SQL

#standardSQL
SELECT *
FROM `project.dataset.table`
WHERE stream_id IN ('1168190076', '1168201031') 
AND 2 = (
  SELECT COUNT(1)
  FROM UNNEST(event_params) param
  WHERE (
    param.key = 'result' AND 
    LOWER(param.value.string_value) = 'success'
  ) OR (
    param.key = 'confirmationNumber' AND 
    NOT param.value.string_value IS NULL
  )
)

答案 1 :(得分:0)

我怀疑您想要更多类似这样的东西:

SELECT t.*
FROM `table_name`t
  UNNEST(event_params) AS params
WHERE t.stream_id IN ('1168190076', '1168201031') AND
      EXISTS (SELECT 1
              FROM UNNEST(t.event_params) p
              WHERE p.key = 'result' AND
                    p.value.string_value IN ('success', 'SUCCESS')
             ) AND
      EXISTS (SELECT 1
              FROM UNNEST(t.event_params) p
              WHERE p.key = 'confirmationNumber'
             );

也就是说,分别测试每个参数。您无需取消结果集的嵌套-当然,除非您真的想要。

我不知道挥之不去的NOT NULL是什么,所以我忽略了它。但是,您可能要检查该值。