Как мне написать запрос для ссылки на два ключа и два значения? - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь написать запрос в Google BigQuery, который извлекает два ключа и два значения. Запрос должен быть следующим: считать различные идентификаторы пользователей psuedo из одной таблицы, где event_params.key = result и event_params.key = номер подтверждения (и не ноль), и event_params.value.string_value = success. Это уже было неопубликовано. Я СУПЕР новичок в 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 ]

1 голос
/ 06 мая 2019

Ниже для BigQuery Standard 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
  )
)
0 голосов
/ 06 мая 2019

Я подозреваю, что вы хотите что-то более похожее на это:

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 в вашем запросе, поэтому я игнорирую это. Вы можете проверить значение, однако.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...