Lil*_*ian 7 sql google-bigquery
我们的项目有一些事件记录用户在页面上停留的时间。我们添加一个名为time_ms的event_params.key,它的值显示了持续时间。如何选择“time_ms”的总和?
我尝试使用 SQL 语句但失败了。
SELECT *
FROM analytics_152426080.events_20190626
WHERE event_name = 'details_viewtime' AND
event_params.key = 'time_ms'
Run Code Online (Sandbox Code Playgroud)
它显示错误消息:
'Cannot access field key on a value with type ARRAY<STRUCT<key STRING, value STRUCT<string_value STRING, int_value INT64, float_value FLOAT64, ...>>> at [7:20]'.
Run Code Online (Sandbox Code Playgroud)
我希望得到'time_ms'的总和,但我应该先解决这个问题。
Gor*_*off 10
我认为你需要unnest:
SELECT *
FROM analytics_152426080.events_20190626 e CROSS JOIN
UNNEST(event_params) ep
WHERE e.event_name = 'details_viewtime' AND
ep.key = 'time_ms';
Run Code Online (Sandbox Code Playgroud)
我不确定实际值的位置,但类似这样:
SELECT SUM(ep.value.int_value)
FROM analytics_152426080.events_20190626 e CROSS JOIN
UNNEST(event_params) ep
WHERE ep.event_name = 'details_viewtime' AND
ep.key = 'time_ms';
Run Code Online (Sandbox Code Playgroud)
假设您要求和的值是一个整数。
这假设值列是某种数字。否则,您需要将其转换为 1。
或者,如果您想对每行的值求和:
SELECT e.*,
(SELECT SUM(ep.value.int_value)
FROM UNNEST(event_params) ep
WHERE ep.key = 'time_ms'
) as sum_ms
FROM analytics_152426080.events_20190626 e
WHERE e.event_name = 'details_viewtime'
Run Code Online (Sandbox Code Playgroud)