У меня есть событие "add_road" в моей таблице больших запросов со значением int в параметрах расстояния и времени. Я хочу найти максимальные и минимальные значения параметров «расстояние» и «время». Я пробовал этот запрос, но он не работает, как я хочу.

SELECT
  (SELECT MAX(param.value.double_value)
  FROM UNNEST (event.params) AS param
  WHERE param.key = "distance") AS distance,
  (SELECT MAX(param.value.int_value)
  FROM UNNEST (event.params) AS param
  WHERE param.key = "time") AS time
FROM 
  `ukrbikeapp.info_androidhive_firebase_ANDROID.app_events_*`,
  UNNEST(event_dim) as event
WHERE event.name = "add_road"
  AND (_TABLE_SUFFIX LIKE '201_05__')

Я понятия не имею, как сделать этот запрос. Пожалуйста, дайте мне совет.

0
DzouSi 27 Май 2017 в 23:40

2 ответа

Лучший ответ

Ниже для BigQuery Standard SQL

#standardSQL
SELECT 
  MAX(IF(param.key = "distance", param.value.double_value, NULL)) AS distance,
  MAX(IF(param.key = "time", param.value.int_value, NULL)) AS time
FROM data, UNNEST(event_dim) AS event, UNNEST(event.params) AS param
WHERE event.name = "add_road"
AND (_TABLE_SUFFIX LIKE '201_05__')
1
Mikhail Berlyant 28 Май 2017 в 02:22

Похоже, вы хотите переместить вычисление MAX во внешний список выбора, чтобы вы могли найти максимумы во всех строках, а не только в массивах. Например,

SELECT
  MAX((SELECT param.value.double_value
  FROM UNNEST (event.params) AS param
  WHERE param.key = "distance")) AS distance,
  MAX((SELECT param.value.int_value
  FROM UNNEST (event.params) AS param
  WHERE param.key = "time")) AS time
FROM 
  `ukrbikeapp.info_androidhive_firebase_ANDROID.app_events_*`,
  UNNEST(event_dim) as event
WHERE event.name = "add_road"
  AND (_TABLE_SUFFIX LIKE '201_05__')
2
Elliott Brossard 27 Май 2017 в 21:14